Line data Source code
1 : /* 2 : * 3 : * 4 : * Distributed under the OpenDDS License. 5 : * See: http://www.opendds.org/license.html 6 : */ 7 : 8 : #include "DCPS/DdsDcps_pch.h" //Only the _pch include should start with DCPS/ 9 : #include "ConditionImpl.h" 10 : 11 : OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL 12 : 13 : namespace OpenDDS { 14 : namespace DCPS { 15 : 16 4 : void ConditionImpl::signal_all() 17 : { 18 4 : if (DCPS_debug_level > 9) { 19 0 : ACE_DEBUG((LM_DEBUG, 20 : ACE_TEXT("(%P|%t) ConditionImpl::signal_all()\n"))); 21 : } 22 : 23 4 : if (!get_trigger_value()) return; 24 : 25 4 : WaitSetSet local_ws; 26 : { 27 4 : ACE_GUARD(ACE_Recursive_Thread_Mutex, g, lock_); 28 4 : local_ws = waitsets_; 29 4 : } 30 : 31 4 : if (DCPS_debug_level > 9) { 32 0 : ACE_DEBUG((LM_DEBUG, 33 : ACE_TEXT("(%P|%t) ConditionImpl::signal_all() - ") 34 : ACE_TEXT("number of sets: %B\n"), 35 : local_ws.size())); 36 : } 37 : 38 4 : for (WaitSetSet::iterator it = local_ws.begin(), end = local_ws.end(); 39 8 : it != end; ++it) { 40 4 : RcHandle<DDS::WaitSet> ws ((*it).lock()); 41 4 : if (ws) 42 4 : ws->signal(this); 43 4 : } 44 4 : } 45 : 46 18 : DDS::ReturnCode_t ConditionImpl::attach_to_ws(DDS::WaitSet_ptr ws) 47 : { 48 18 : ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, g, lock_, 49 : DDS::RETCODE_OUT_OF_RESOURCES); 50 36 : return waitsets_.insert(OpenDDS::DCPS::WeakRcHandle<DDS::WaitSet>(*ws)).second 51 18 : ? DDS::RETCODE_OK : DDS::RETCODE_PRECONDITION_NOT_MET; 52 18 : } 53 : 54 14 : DDS::ReturnCode_t ConditionImpl::detach_from_ws(DDS::WaitSet_ptr ws) 55 : { 56 14 : ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, g, lock_, 57 : DDS::RETCODE_OUT_OF_RESOURCES); 58 28 : return waitsets_.erase(OpenDDS::DCPS::WeakRcHandle<DDS::WaitSet>(*ws)) 59 14 : ? DDS::RETCODE_OK : DDS::RETCODE_PRECONDITION_NOT_MET; 60 14 : } 61 : 62 : } // namespace DCPS 63 : } // namespace OpenDDS 64 : 65 : OPENDDS_END_VERSIONED_NAMESPACE_DECL