#include <ConditionImpl.h>
Public Member Functions | |
DDS::ReturnCode_t | attach_to_ws (DDS::WaitSet_ptr ws) |
DDS::ReturnCode_t | detach_from_ws (DDS::WaitSet_ptr ws) |
void | signal_all () |
Protected Member Functions | |
ConditionImpl () | |
virtual | ~ConditionImpl () |
typedef | OPENDDS_SET (OpenDDS::DCPS::WeakRcHandle< DDS::WaitSet >) WaitSetSet |
Protected Attributes | |
WaitSetSet | waitsets_ |
ACE_Recursive_Thread_Mutex | lock_ |
Definition at line 27 of file ConditionImpl.h.
OpenDDS::DCPS::ConditionImpl::ConditionImpl | ( | ) | [inline, protected] |
Definition at line 35 of file ConditionImpl.h.
virtual OpenDDS::DCPS::ConditionImpl::~ConditionImpl | ( | ) | [inline, protected, virtual] |
Definition at line 36 of file ConditionImpl.h.
DDS::ReturnCode_t OpenDDS::DCPS::ConditionImpl::attach_to_ws | ( | DDS::WaitSet_ptr | ws | ) |
Definition at line 47 of file ConditionImpl.cpp.
References lock_, DDS::RETCODE_OK, DDS::RETCODE_OUT_OF_RESOURCES, DDS::RETCODE_PRECONDITION_NOT_MET, and waitsets_.
00048 { 00049 ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, g, lock_, 00050 DDS::RETCODE_OUT_OF_RESOURCES); 00051 return waitsets_.insert(OpenDDS::DCPS::WeakRcHandle<DDS::WaitSet>(*ws)).second 00052 ? DDS::RETCODE_OK : DDS::RETCODE_PRECONDITION_NOT_MET; 00053 }
DDS::ReturnCode_t OpenDDS::DCPS::ConditionImpl::detach_from_ws | ( | DDS::WaitSet_ptr | ws | ) |
Definition at line 55 of file ConditionImpl.cpp.
References lock_, DDS::RETCODE_OK, DDS::RETCODE_OUT_OF_RESOURCES, DDS::RETCODE_PRECONDITION_NOT_MET, and waitsets_.
00056 { 00057 ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, g, lock_, 00058 DDS::RETCODE_OUT_OF_RESOURCES); 00059 return waitsets_.erase(OpenDDS::DCPS::WeakRcHandle<DDS::WaitSet>(*ws)) 00060 ? DDS::RETCODE_OK : DDS::RETCODE_PRECONDITION_NOT_MET; 00061 }
typedef OpenDDS::DCPS::ConditionImpl::OPENDDS_SET | ( | OpenDDS::DCPS::WeakRcHandle< DDS::WaitSet > | ) | [protected] |
void OpenDDS::DCPS::ConditionImpl::signal_all | ( | ) |
Definition at line 16 of file ConditionImpl.cpp.
References ACE_TEXT(), OpenDDS::DCPS::DCPS_debug_level, DDS::Condition::get_trigger_value(), LM_DEBUG, lock_, and waitsets_.
Referenced by OpenDDS::DCPS::DataReaderImpl::notify_read_conditions(), OpenDDS::DCPS::EntityImpl::notify_status_condition(), OpenDDS::DCPS::StatusConditionImpl::set_enabled_statuses(), and DDS::GuardCondition::set_trigger_value().
00017 { 00018 if (DCPS_debug_level > 9) { 00019 ACE_DEBUG((LM_DEBUG, 00020 ACE_TEXT("(%P|%t) ConditionImpl::signal_all()\n"))); 00021 } 00022 00023 if (!get_trigger_value()) return; 00024 00025 WaitSetSet local_ws; 00026 { 00027 ACE_GUARD(ACE_Recursive_Thread_Mutex, g, lock_); 00028 local_ws = waitsets_; 00029 } 00030 00031 if (DCPS_debug_level > 9) { 00032 ACE_DEBUG((LM_DEBUG, 00033 ACE_TEXT("(%P|%t) ConditionImpl::signal_all() - ") 00034 ACE_TEXT("number of sets: %d, locally: %d.\n"), 00035 this->waitsets_.size(), 00036 local_ws.size())); 00037 } 00038 00039 for (WaitSetSet::iterator it = local_ws.begin(), end = local_ws.end(); 00040 it != end; ++it) { 00041 RcHandle<DDS::WaitSet> ws ((*it).lock()); 00042 if (ws) 00043 ws->signal(this); 00044 } 00045 }
Use a recursive mutex because we have derived classes that need the recursive behavior
Reimplemented in OpenDDS::DCPS::QueryConditionImpl.
Definition at line 42 of file ConditionImpl.h.
Referenced by attach_to_ws(), detach_from_ws(), OpenDDS::DCPS::StatusConditionImpl::get_enabled_statuses(), OpenDDS::DCPS::StatusConditionImpl::get_trigger_value(), OpenDDS::DCPS::StatusConditionImpl::set_enabled_statuses(), and signal_all().
WaitSetSet OpenDDS::DCPS::ConditionImpl::waitsets_ [protected] |
Definition at line 39 of file ConditionImpl.h.
Referenced by attach_to_ws(), detach_from_ws(), and signal_all().