summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-05-12 15:22:55 +0000
committercoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-05-12 15:22:55 +0000
commitb3b432820e3c0f1f940a6ab3cd3e68164219b23d (patch)
tree82e9ffa51e302ef1a6dec0f542b2a63c4b8ae1ca
parente10a801fec75bd960a4a5017681faed99ea2bc84 (diff)
downloadATCD-b3b432820e3c0f1f940a6ab3cd3e68164219b23d.tar.gz
ChangeLogTag:Wed May 12 10:18:34 1999 Carlos O'Ryan <coryan@cs.wustl.edu>
-rw-r--r--TAO/ChangeLog-99c10
-rw-r--r--TAO/docs/releasenotes/TODO.html33
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/EC_Gateway.cpp37
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/EC_Gateway_UDP.cpp68
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp2
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
&lt;jaehrig@desys.com&gt;, 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 ();
}