int TAO_EC_ProxyPushSupplier::filter_nocopy (RtecEventComm::EventSet& event, TAO_EC_QOS_Info& qos_info) { Destroy_Guard auto_destroy (this->refcount_, this->event_channel_, this); int result = 0; { ACE_GUARD_THROW_EX ( ACE_Lock, ace_mon, *this->lock_, RtecEventChannelAdmin::EventChannel::SYNCHRONIZATION_ERROR ()); if (this->is_connected_i ()) { result = this->child_->filter_nocopy (event, qos_info); } } return result; }
void TAO_CEC_ProxyPushSupplier::push_nocopy (CORBA::Any &event) { Destroy_Guard auto_destroy (this->refcount_, this->event_channel_, this); { ACE_GUARD (ACE_Lock, ace_mon, *this->lock_); if (this->is_connected_i () == 0) return; TAO_ESF_RefCount_Guard<CORBA::ULong> cnt_mon (this->refcount_); { TAO_CEC_Unlock reverse_lock (*this->lock_); ACE_GUARD (TAO_CEC_Unlock, ace_mon, reverse_lock); this->event_channel_->dispatching ()->push_nocopy (this, event); } } }
void TAO_CEC_ProxyPushSupplier::invoke (const TAO_CEC_TypedEvent& typed_event) { Destroy_Guard_Typed auto_destroy (this->refcount_, this->typed_event_channel_, this); { ACE_GUARD (ACE_Lock, ace_mon, *this->lock_); if (this->is_connected_i () == 0) return; TAO_ESF_RefCount_Guard<CORBA::ULong> cnt_mon (this->refcount_); { TAO_CEC_Unlock reverse_lock (*this->lock_); ACE_GUARD (TAO_CEC_Unlock, ace_mon, reverse_lock); this->typed_event_channel_->dispatching ()->invoke (this, typed_event); } } }
int Worker::svc (void) { // ACE_DEBUG ((LM_DEBUG, "Worker starts\n")); try { TAO_SYNCH_MUTEX mutex; int pending_requests = 2; Test::AMI_ControllerHandler_var handler; { Controller_Handler *handler_impl; ACE_NEW_RETURN (handler_impl, Controller_Handler (&mutex, &pending_requests), -1); CORBA::Object_var poa_object = this->orb_->resolve_initial_references("RootPOA"); PortableServer::POA_var root_poa = PortableServer::POA::_narrow (poa_object.in ()); PortableServer::ObjectId_var id = root_poa->activate_object (handler_impl); CORBA::Object_var object = root_poa->id_to_reference (id.in ()); PortableServer::ServantBase_var auto_destroy (handler_impl); handler = Test::AMI_ControllerHandler::_narrow (object.in ()); } validate_connection(this->controller_.in()); this->controller_->sendc_worker_started (handler.in ()); // ACE_DEBUG ((LM_DEBUG, "Worker start reported\n")); ACE_Time_Value tv (0, 1000 * this->milliseconds_); ACE_OS::sleep (tv); this->controller_->sendc_worker_finished (handler.in ()); // ACE_DEBUG ((LM_DEBUG, "Worker completion reported\n")); for (;;) { ACE_Time_Value tv (0, 1000 * this->milliseconds_); this->orb_->run (tv); ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, mutex, -1); if (pending_requests == 0) break; } } catch (const CORBA::Exception& ex) { ex._tao_print_exception ("Exception in svc() method\n"); } return 0; }