From b3b432820e3c0f1f940a6ab3cd3e68164219b23d Mon Sep 17 00:00:00 2001 From: coryan Date: Wed, 12 May 1999 15:22:55 +0000 Subject: ChangeLogTag:Wed May 12 10:18:34 1999 Carlos O'Ryan --- TAO/ChangeLog-99c | 10 ++++ TAO/docs/releasenotes/TODO.html | 33 +++++++------ TAO/orbsvcs/orbsvcs/Event/EC_Gateway.cpp | 37 +++++++++++--- TAO/orbsvcs/orbsvcs/Event/EC_Gateway_UDP.cpp | 68 +++++++++++++++++++------- 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 + + * 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 for pointing + this out. + Wed May 12 10:16:15 EDT 1999 Aniruddha Gokhale * 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.
[ASSIGNED TO:] Carlos +

+

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 Filter_Builder and + decorators for the regular filters.

@@ -248,17 +253,6 @@

New features and Bug fixes

    -
  1. EC:The new implementation of the EC does not send - disconnect messages on shutdown, this has to be - implemented. -

    -
  2. -
  3. EC: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 Filter_Builder and - decorators for the regular filters. -

    -
  4. EC:The Priority_Dispatching strategy is incomplete.

    @@ -319,6 +313,11 @@

  5. +
  6. EC:The observer in the TAO_EC_Gateway + class is not properly deactivated. +

    +
  7. +
  8. EC: 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.

    Completed Tasks

      +
    1. EC:The new implementation of the EC does not send + disconnect messages on shutdown, this has to be + implemented. +
      [DONE] +

      +
    2. EC: Use the Service_Configurator to dynamically load the EC Module_Factory thus making it really configurable. The same feature is needed for the new EC_Factory class.
      [STATUS] Notice that this is fairly easy to implement, there doesn't seem to be much demand for it. -
      [STATUS] In the new EC it is possible to load the +
      [DONE] In the new EC it is possible to load the strategy factory.

    3. @@ -1115,7 +1120,7 @@ encapsulation format.
    4. EC: The supplier filters could depend on the QoS data, as consumer filters do. We should provide a factory for them too. -
      [STATUS] Done +
      [DONE]

    5. @@ -1124,7 +1129,7 @@ encapsulation format. of a supplier, the current scheme (disconnecting and connecting again) is inefficient.
      [ASSIGNED TO:] Carlos -
      [STATUS] Done +
      [DONE]

      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 (); } -- cgit v1.2.1