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
- EC:The new implementation of the EC does not send
- disconnect
messages on shutdown, this has to be
- implemented.
-
-
- 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.
-
-
EC:The Priority_Dispatching
strategy
is incomplete.
@@ -319,6 +313,11 @@
+ EC:The observer in the TAO_EC_Gateway
+ class is not properly deactivated.
+
+
+
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
+ EC:The new implementation of the EC does not send
+ disconnect
messages on shutdown, this has to be
+ implemented.
+
[DONE]
+
+
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.
@@ -1115,7 +1120,7 @@ encapsulation format.
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]
@@ -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