LCOV - code coverage report
Current view: top level - DCPS - ConditionImpl.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 25 27 92.6 %
Date: 2023-04-30 01:32:43 Functions: 3 3 100.0 %

          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

Generated by: LCOV version 1.16