diff options
author | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-05-12 15:22:55 +0000 |
---|---|---|
committer | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-05-12 15:22:55 +0000 |
commit | b3b432820e3c0f1f940a6ab3cd3e68164219b23d (patch) | |
tree | 82e9ffa51e302ef1a6dec0f542b2a63c4b8ae1ca | |
parent | e10a801fec75bd960a4a5017681faed99ea2bc84 (diff) | |
download | ATCD-b3b432820e3c0f1f940a6ab3cd3e68164219b23d.tar.gz |
ChangeLogTag:Wed May 12 10:18:34 1999 Carlos O'Ryan <coryan@cs.wustl.edu>
-rw-r--r-- | TAO/ChangeLog-99c | 10 | ||||
-rw-r--r-- | TAO/docs/releasenotes/TODO.html | 33 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/EC_Gateway.cpp | 37 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/EC_Gateway_UDP.cpp | 68 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp | 2 |
5 files changed, 109 insertions, 41 deletions
diff --git a/TAO/ChangeLog-99c b/TAO/ChangeLog-99c index 59637bdecf4..d43d2a164c8 100644 --- a/TAO/ChangeLog-99c +++ b/TAO/ChangeLog-99c @@ -1,3 +1,13 @@ +Wed May 12 10:18:34 1999 Carlos O'Ryan <coryan@cs.wustl.edu> + + * docs/releasenotes/TODO.html: + * orbsvcs/orbsvcs/Event/EC_Gateway.cpp: + * orbsvcs/orbsvcs/Event/EC_Gateway_UDP.cpp: + * orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp: + Some servants where not beign properly deactivated, thanks to + J. Russell Noseworthy <rnosewor@objectsciences.com> for pointing + this out. + Wed May 12 10:16:15 EDT 1999 Aniruddha Gokhale <gokhale@sahyadri.research.bell-labs.com> * tao/corbafwd.h: diff --git a/TAO/docs/releasenotes/TODO.html b/TAO/docs/releasenotes/TODO.html index bb608148c6f..d97809d6953 100644 --- a/TAO/docs/releasenotes/TODO.html +++ b/TAO/docs/releasenotes/TODO.html @@ -49,6 +49,11 @@ specially generate the strategies and changes required to support hard real-time behavior. <BR>[ASSIGNED TO:] Carlos + </P> + <P>The new EC does not update the dependencies in + the scheduling service. We should be able to strategize this + by the appropiate use of a <CODE>Filter_Builder</CODE> and + decorators for the regular filters. </P> </LI> @@ -248,17 +253,6 @@ <H4>New features and Bug fixes</H4> <OL> - <LI><P><B>EC:</B>The new implementation of the EC does not send - <CODE>disconnect</CODE> messages on shutdown, this has to be - implemented. - </P> - </LI> - <LI><P><B>EC:</B>The new EC does not update the dependencies in - the scheduling service. We should be able to strategize this - by the appropiate use of a <CODE>Filter_Builder</CODE> and - decorators for the regular filters. - </P> - </LI> <LI><P><B>EC:</B>The <CODE>Priority_Dispatching</CODE> strategy is incomplete. </P> @@ -319,6 +313,11 @@ </P> </LI> + <LI><P><B>EC:</B>The observer in the <CODE>TAO_EC_Gateway</CODE> + class is not properly deactivated. + </P> + </LI> + <LI><P><B>EC:</B> Sometimes the Event Channel dead-locks during shutdown. According to Ulf Jährig <jaehrig@desys.com>, an easy way to reproduce the @@ -1101,13 +1100,19 @@ encapsulation format. <H3>Completed Tasks</H3> <OL> + <LI><P><B>EC:</B>The new implementation of the EC does not send + <CODE>disconnect</CODE> messages on shutdown, this has to be + implemented. + <BR>[DONE] + </P> + </LI> <LI><P><B>EC:</B> Use the Service_Configurator to dynamically load the EC Module_Factory thus making it really configurable. The same feature is needed for the new <CODE>EC_Factory</CODE> class. <BR>[STATUS] Notice that this is fairly easy to implement, there doesn't seem to be much demand for it. - <BR>[STATUS] In the new EC it is possible to load the + <BR>[DONE] In the new EC it is possible to load the strategy factory. </P> </LI> @@ -1115,7 +1120,7 @@ encapsulation format. <LI><P><B>EC:</B> The supplier filters could depend on the QoS data, as consumer filters do. We should provide a factory for them too. - <BR>[STATUS] Done + <BR>[DONE] </P> </LI> @@ -1124,7 +1129,7 @@ encapsulation format. of a supplier, the current scheme (disconnecting and connecting again) is inefficient. <BR>[ASSIGNED TO:] Carlos - <BR>[STATUS] Done + <BR>[DONE] </P> </LI> diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_Gateway.cpp b/TAO/orbsvcs/orbsvcs/Event/EC_Gateway.cpp index 4737ba276c8..f1a18b6fd63 100644 --- a/TAO/orbsvcs/orbsvcs/Event/EC_Gateway.cpp +++ b/TAO/orbsvcs/orbsvcs/Event/EC_Gateway.cpp @@ -93,7 +93,7 @@ TAO_EC_Gateway_IIOP::init (RtecEventChannelAdmin::EventChannel_ptr rmt_ec, } void -TAO_EC_Gateway_IIOP::close (CORBA::Environment &env) +TAO_EC_Gateway_IIOP::close (CORBA::Environment &ACE_TRY_ENV) { // ACE_DEBUG ((LM_DEBUG, "ECG (%t) Closing gateway\n")); if (CORBA::is_nil (this->supplier_proxy_.in ())) @@ -105,22 +105,45 @@ TAO_EC_Gateway_IIOP::close (CORBA::Environment &env) j != this->consumer_proxy_map_.end (); ++j) { - (*j).int_id_->disconnect_push_consumer (env); + (*j).int_id_->disconnect_push_consumer (ACE_TRY_ENV); CORBA::release ((*j).int_id_); - TAO_CHECK_ENV_RETURN_VOID (env); + ACE_CHECK; } this->consumer_proxy_map_.close (); } - this->default_consumer_proxy_->disconnect_push_consumer (env); - TAO_CHECK_ENV_RETURN_VOID (env); + this->default_consumer_proxy_->disconnect_push_consumer (ACE_TRY_ENV); + ACE_CHECK; + this->default_consumer_proxy_ = RtecEventChannelAdmin::ProxyPushConsumer::_nil (); - this->supplier_proxy_->disconnect_push_supplier (env); - TAO_CHECK_ENV_RETURN_VOID (env); + { + PortableServer::POA_var poa = + this->supplier_._default_POA (ACE_TRY_ENV); + ACE_CHECK; + PortableServer::ObjectId_var id = + poa->servant_to_id (&this->supplier_, ACE_TRY_ENV); + ACE_CHECK; + poa->deactivate_object (id.in (), ACE_TRY_ENV); + ACE_CHECK; + } + + this->supplier_proxy_->disconnect_push_supplier (ACE_TRY_ENV); + ACE_CHECK; + this->supplier_proxy_ = RtecEventChannelAdmin::ProxyPushSupplier::_nil (); + { + PortableServer::POA_var poa = + this->consumer_._default_POA (ACE_TRY_ENV); + ACE_CHECK; + PortableServer::ObjectId_var id = + poa->servant_to_id (&this->consumer_, ACE_TRY_ENV); + ACE_CHECK; + poa->deactivate_object (id.in (), ACE_TRY_ENV); + ACE_CHECK; + } } void diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_Gateway_UDP.cpp b/TAO/orbsvcs/orbsvcs/Event/EC_Gateway_UDP.cpp index 62ada3d25a4..c6e919c2dd3 100644 --- a/TAO/orbsvcs/orbsvcs/Event/EC_Gateway_UDP.cpp +++ b/TAO/orbsvcs/orbsvcs/Event/EC_Gateway_UDP.cpp @@ -98,16 +98,26 @@ TAO_ECG_UDP_Sender::open (RtecEventChannelAdmin::ConsumerQOS& sub, } void -TAO_ECG_UDP_Sender::close (CORBA::Environment &env) +TAO_ECG_UDP_Sender::close (CORBA::Environment &ACE_TRY_ENV) { // ACE_DEBUG ((LM_DEBUG, "ECG (%t) Closing gateway\n")); if (CORBA::is_nil (this->supplier_proxy_.in ())) return; - this->supplier_proxy_->disconnect_push_supplier (env); - if (env.exception () != 0) return; + this->supplier_proxy_->disconnect_push_supplier (ACE_TRY_ENV); + ACE_CHECK; + this->supplier_proxy_ = RtecEventChannelAdmin::ProxyPushSupplier::_nil (); + + PortableServer::POA_var poa = + this->_default_POA (ACE_TRY_ENV); + ACE_CHECK; + PortableServer::ObjectId_var id = + poa->servant_to_id (this, ACE_TRY_ENV); + ACE_CHECK; + poa->deactivate_object (id.in (), ACE_TRY_ENV); + ACE_CHECK; } void @@ -120,7 +130,7 @@ TAO_ECG_UDP_Sender::disconnect_push_consumer (CORBA::Environment &) void TAO_ECG_UDP_Sender::push (const RtecEventComm::EventSet &events, - CORBA::Environment & TAO_IN_ENV) + CORBA::Environment & ACE_TRY_ENV) { // ACE_DEBUG ((LM_DEBUG, "ECG_UDP_Sender::push - \n")); @@ -157,8 +167,8 @@ TAO_ECG_UDP_Sender::push (const RtecEventComm::EventSet &events, // Grab the right mcast group for this event... RtecUDPAdmin::UDP_Addr udp_addr; - this->addr_server_->get_addr (header, udp_addr, TAO_IN_ENV); - TAO_CHECK_ENV_RETURN_VOID(TAO_IN_ENV); + this->addr_server_->get_addr (header, udp_addr, ACE_TRY_ENV); + ACE_CHECK; // Start building the message TAO_OutputCDR cdr; @@ -167,11 +177,11 @@ TAO_ECG_UDP_Sender::push (const RtecEventComm::EventSet &events, // marshal a modified version of the header, but the payload is // marshal without any extra copies. cdr.write_ulong (1); - cdr.encode (RtecEventComm::_tc_EventHeader, &header, 0, TAO_IN_ENV); - TAO_CHECK_ENV_RETURN_VOID(TAO_IN_ENV); + cdr.encode (RtecEventComm::_tc_EventHeader, &header, 0, ACE_TRY_ENV); + ACE_CHECK; - cdr.encode (RtecEventComm::_tc_EventData, &e.data, 0, TAO_IN_ENV); - TAO_CHECK_ENV_RETURN_VOID(TAO_IN_ENV); + cdr.encode (RtecEventComm::_tc_EventData, &e.data, 0, ACE_TRY_ENV); + ACE_CHECK; const int TAO_WRITEV_MAX = IOV_MAX; iovec iov[TAO_WRITEV_MAX]; @@ -219,8 +229,8 @@ TAO_ECG_UDP_Sender::push (const RtecEventComm::EventSet &events, fragment_count, iov, iovcnt, - TAO_IN_ENV); - TAO_CHECK_ENV_RETURN_VOID(TAO_IN_ENV); + ACE_TRY_ENV); + ACE_CHECK; fragment_id++; fragment_offset += max_fragment_payload; @@ -246,8 +256,8 @@ TAO_ECG_UDP_Sender::push (const RtecEventComm::EventSet &events, fragment_count, iov, iovcnt, - TAO_IN_ENV); - TAO_CHECK_ENV_RETURN_VOID(TAO_IN_ENV); + ACE_TRY_ENV); + ACE_CHECK; fragment_id++; fragment_offset += max_fragment_payload; @@ -267,8 +277,8 @@ TAO_ECG_UDP_Sender::push (const RtecEventComm::EventSet &events, fragment_count, iov, iovcnt, - TAO_IN_ENV); - TAO_CHECK_ENV_RETURN_VOID(TAO_IN_ENV); + ACE_TRY_ENV); + ACE_CHECK; fragment_id++; fragment_offset += fragment_size; @@ -692,17 +702,26 @@ TAO_ECG_UDP_Receiver::open (RtecEventChannelAdmin::SupplierQOS& pub, } void -TAO_ECG_UDP_Receiver::close (CORBA::Environment &env) +TAO_ECG_UDP_Receiver::close (CORBA::Environment &ACE_TRY_ENV) { // ACE_DEBUG ((LM_DEBUG, "ECG (%t) Closing gateway\n")); if (CORBA::is_nil (this->consumer_proxy_.in ())) return; - this->consumer_proxy_->disconnect_push_consumer (env); - if (env.exception () != 0) return; + this->consumer_proxy_->disconnect_push_consumer (ACE_TRY_ENV); + ACE_CHECK; + this->consumer_proxy_ = RtecEventChannelAdmin::ProxyPushConsumer::_nil (); + PortableServer::POA_var poa = + this->_default_POA (ACE_TRY_ENV); + ACE_CHECK; + PortableServer::ObjectId_var id = + poa->servant_to_id (this, ACE_TRY_ENV); + ACE_CHECK; + poa->deactivate_object (id.in (), ACE_TRY_ENV); + ACE_CHECK; } void @@ -1046,6 +1065,17 @@ TAO_ECG_Mcast_EH::close (CORBA::Environment& TAO_IN_ENV) this->handle_ = 0; TAO_CHECK_ENV_RETURN (TAO_IN_ENV, -1); + { + PortableServer::POA_var poa = + this->observer_._default_POA (ACE_TRY_ENV); + ACE_CHECK_RETURN (-1); + PortableServer::ObjectId_var id = + poa->servant_to_id (&this->observer_, ACE_TRY_ENV); + ACE_CHECK_RETURN (-1); + poa->deactivate_object (id.in (), ACE_TRY_ENV); + ACE_CHECK_RETURN (-1); + } + return 0; } diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp b/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp index cd8d9643f42..a922816abf9 100644 --- a/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp +++ b/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp @@ -70,7 +70,7 @@ TAO_EC_ProxyPushSupplier::shutdown (CORBA::Environment &ACE_TRY_ENV) return; consumer = this->consumer_._retn (); - + this->cleanup_i (); } |