diff options
author | oci <oci@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-12-20 21:45:03 +0000 |
---|---|---|
committer | oci <oci@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-12-20 21:45:03 +0000 |
commit | 2cee5268c3065e12639a91737f5ae0230d9e15ed (patch) | |
tree | ef6dd010a2862dd9c0bad9523a9e8b4d2926768f /ace/RMCast | |
parent | 243761727756ea5b369e10236b2020f0eeb290cd (diff) | |
download | ATCD-2cee5268c3065e12639a91737f5ae0230d9e15ed.tar.gz |
Changelog tag Wed Dec 20 15:42:36 2000 Phil Mesnier <mesnier_p@ociweb.com>
Diffstat (limited to 'ace/RMCast')
-rw-r--r-- | ace/RMCast/RMCast_IO_UDP.cpp | 57 | ||||
-rw-r--r-- | ace/RMCast/RMCast_IO_UDP.h | 4 | ||||
-rw-r--r-- | ace/RMCast/RMCast_IO_UDP.i | 28 |
3 files changed, 62 insertions, 27 deletions
diff --git a/ace/RMCast/RMCast_IO_UDP.cpp b/ace/RMCast/RMCast_IO_UDP.cpp index f3149945c6a..e01e9b07cbd 100644 --- a/ace/RMCast/RMCast_IO_UDP.cpp +++ b/ace/RMCast/RMCast_IO_UDP.cpp @@ -5,6 +5,7 @@ #include "RMCast_IO_UDP.h" #include "RMCast_UDP_Proxy.h" #include "RMCast_Module_Factory.h" + #include "ace/Handle_Set.h" #include "ace/Reactor.h" #include "ace/Message_Block.h" @@ -136,39 +137,41 @@ ACE_RMCast_IO_UDP::handle_input (ACE_HANDLE) // object, all we need is some sort of validation strategy, a // different one for the receiver and another one for the // sender. + #if 0 if (type == ACE_RMCast::MT_ACK - || type == ACE_RMCast::MT_JOIN - || type == ACE_RMCast::MT_LEAVE - || type == ACE_RMCast::MT_ACK_LEAVE) - { - // All these message types indicate a problem, the should be - // generated by receivers, not received by them. - return 0; - } + || type == ACE_RMCast::MT_JOIN + || type == ACE_RMCast::MT_LEAVE + || type == ACE_RMCast::MT_ACK_LEAVE) + { + // All these message types indicate a problem, the should be + // generated by receivers, not received by them. + return 0; + } #endif /* 0 */ ACE_RMCast_Module *module = this->factory_->create (); if (module == 0) - { - // @@ LOG?? - // Try to continue working, maybe the module can be created - // later. - return 0; - } - ACE_NEW_RETURN (proxy, - ACE_RMCast_UDP_Proxy(this, - from_address), - 0); - proxy->next (module); - - if (this->map_.bind (from_address, proxy) != 0) - { - // @@ LOG?? - return 0; - } - - } + { + // @@ LOG?? + // Try to continue working, maybe the module can be created + // later. + return 0; + } + + // This is necessary to satisfy the stupid xgcc for Lynx on Solaris + // by including the code directly causes : + // RMCast_IO_UDP.cpp:202: error: internal error--unrecognizable insn: + // (insn 1510 1507 524 (set (mem:SI (plus:SI (reg:SI 28 r28) + // (const_int 65536))) + // (reg:SI 0 r0)) -1 (insn_list 528 (insn_list 1507 (nil))) + // (nil)) + // /usr/lynx/home2/jose/98r2/src/gcc/toplev.c:1489: Internal compiler error in function fatal_insn + // to be thrown at the end of the function. + if ((proxy = allocate_and_bind_proxy(module,from_address)) == 0) + return 0; + + } // Have the proxy process the message and do the right thing. if (proxy->receive_message (buffer, r) != 0) diff --git a/ace/RMCast/RMCast_IO_UDP.h b/ace/RMCast/RMCast_IO_UDP.h index 1a692a36517..2748a4d3050 100644 --- a/ace/RMCast/RMCast_IO_UDP.h +++ b/ace/RMCast/RMCast_IO_UDP.h @@ -109,6 +109,10 @@ public: virtual int leave (ACE_RMCast::Leave &); private: + + ACE_RMCast_UDP_Proxy *allocate_and_bind_proxy (ACE_RMCast_Module *module, + const ACE_INET_Addr &); + //! The factory used to create the modules attached to each proxy ACE_RMCast_Module_Factory *factory_; diff --git a/ace/RMCast/RMCast_IO_UDP.i b/ace/RMCast/RMCast_IO_UDP.i index f542e85df70..c39a203e994 100644 --- a/ace/RMCast/RMCast_IO_UDP.i +++ b/ace/RMCast/RMCast_IO_UDP.i @@ -1,8 +1,36 @@ // $Id$ +#include "RMCast_UDP_Proxy.h" +#include "RMCast_Module_Factory.h" + ACE_INLINE ACE_RMCast_IO_UDP:: ACE_RMCast_IO_UDP (ACE_RMCast_Module_Factory *factory) : factory_ (factory) { } + + +// Workaround failure in gcc for lynx hosted on solaris +// see ACE_RMCast_IO_UDP::handle_input() for more details +ACE_INLINE ACE_RMCast_UDP_Proxy * +ACE_RMCast_IO_UDP::allocate_and_bind_proxy (ACE_RMCast_Module *module, + const ACE_INET_Addr& from_address) +{ + ACE_RMCast_UDP_Proxy *proxy; + ACE_NEW_RETURN (proxy, + ACE_RMCast_UDP_Proxy(this, + from_address), + 0); + proxy->next (module); + + if (this->map_.bind (from_address, proxy) != 0) + { + // @@ LOG?? + return 0; + } + + return proxy; +} + + |