summaryrefslogtreecommitdiff
path: root/ace/RMCast
diff options
context:
space:
mode:
authoroci <oci@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-12-20 21:45:03 +0000
committeroci <oci@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-12-20 21:45:03 +0000
commit2cee5268c3065e12639a91737f5ae0230d9e15ed (patch)
treeef6dd010a2862dd9c0bad9523a9e8b4d2926768f /ace/RMCast
parent243761727756ea5b369e10236b2020f0eeb290cd (diff)
downloadATCD-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.cpp57
-rw-r--r--ace/RMCast/RMCast_IO_UDP.h4
-rw-r--r--ace/RMCast/RMCast_IO_UDP.i28
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;
+}
+
+