summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp42
1 files changed, 26 insertions, 16 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp b/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp
index 9d612e50bd1..e3942715db5 100644
--- a/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp
+++ b/TAO/orbsvcs/orbsvcs/Event/EC_ProxySupplier.cpp
@@ -201,14 +201,10 @@ TAO_EC_ProxyPushSupplier::push (const RtecEventComm::EventSet& event,
TAO_EC_QOS_Info& qos_info,
CORBA::Environment& ACE_TRY_ENV)
{
- // Do not take a lock, this is a call back from our child filter, so
- // we are holding the lock already (in the filter() method).
- if (this->is_connected_i ())
- this->event_channel_->dispatching ()->push (this,
- this->consumer_.in (),
- event,
- qos_info,
- ACE_TRY_ENV);
+ this->event_channel_->dispatching ()->push (this,
+ event,
+ qos_info,
+ ACE_TRY_ENV);
this->child_->clear ();
}
@@ -217,18 +213,32 @@ TAO_EC_ProxyPushSupplier::push_nocopy (RtecEventComm::EventSet& event,
TAO_EC_QOS_Info& qos_info,
CORBA::Environment& ACE_TRY_ENV)
{
- // Do not take a lock, this is a call back from our child filter, so
- // we are holding the lock already (in the filter() method).
- if (this->is_connected_i ())
- this->event_channel_->dispatching ()->push_nocopy (this,
- this->consumer_.in (),
- event,
- qos_info,
- ACE_TRY_ENV);
+ this->event_channel_->dispatching ()->push_nocopy (this,
+ event,
+ qos_info,
+ ACE_TRY_ENV);
this->child_->clear ();
}
void
+TAO_EC_ProxyPushSupplier::push_to_consumer (const RtecEventComm::EventSet& event,
+ CORBA::Environment& ACE_TRY_ENV)
+{
+ ACE_GUARD_THROW_EX (
+ ACE_Lock, ace_mon, *this->lock_,
+ RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR ());
+ ACE_CHECK;
+
+ if (this->is_connected_i () == 0)
+ return; // TAO_THROW (RtecEventComm::Disconnected ());????
+
+ if (this->suspended_ != 0)
+ return;
+
+ this->consumer_->push (event, ACE_TRY_ENV);
+}
+
+void
TAO_EC_ProxyPushSupplier::clear (void)
{
ACE_GUARD (ACE_Lock, ace_mon, *this->lock_);