Merge pull request #2301 from sonndinh/remove-dup-reactor-functions
[ACE_TAO.git] / ACE / ace / Condition_Thread_Mutex.inl
blob614d9f0eb8789d06d690d377ab4d77ed7a648e83
1 // -*- C++ -*-
2 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
4 ACE_INLINE int
5 ACE_Condition<ACE_Thread_Mutex>::remove ()
7 // ACE_TRACE ("ACE_Condition<ACE_Thread_Mutex>::remove");
9   // <cond_destroy> is called in a loop if the condition variable is
10   // BUSY.  This avoids a condition where a condition is signaled and
11   // because of some timing problem, the thread that is to be signaled
12   // has called the cond_wait routine after the signal call.  Since
13   // the condition signal is not queued in any way, deadlock occurs.
15   int result = 0;
17   if (!this->removed_)
18     {
19       this->removed_ = true;
21       while ((result = ACE_OS::cond_destroy (&this->cond_)) == -1
22              && errno == EBUSY)
23         {
24           ACE_OS::cond_broadcast (&this->cond_);
25           ACE_OS::thr_yield ();
26         }
27     }
28   return result;
31 ACE_INLINE ACE_Thread_Mutex &
32 ACE_Condition<ACE_Thread_Mutex>::mutex ()
34 // ACE_TRACE ("ACE_Condition<ACE_Thread_Mutex>::mutex");
35   return this->mutex_;
38 ACE_END_VERSIONED_NAMESPACE_DECL