summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlevine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1996-12-24 19:56:14 +0000
committerlevine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1996-12-24 19:56:14 +0000
commitc66db68f5b07718bbc5a1803850d730494039d92 (patch)
treef575b4f73cf75f565b3e130cf15a4bd8dc5e51dd
parent4c246fa57f281c3474c72644c8c4d1d2fe730c39 (diff)
downloadATCD-c66db68f5b07718bbc5a1803850d730494039d92.tar.gz
in ACE_cond_t, declare waiters_done_ as ACE_sema_t on VxWorks only
-rw-r--r--ace/OS.h6
-rw-r--r--ace/OS.i27
2 files changed, 32 insertions, 1 deletions
diff --git a/ace/OS.h b/ace/OS.h
index bb7f0585187..ddfc75b0c12 100644
--- a/ace/OS.h
+++ b/ace/OS.h
@@ -773,8 +773,12 @@ struct ACE_cond_t
ACE_sema_t sema_;
// Queue up threads waiting for the condition to become signaled.
-
+
+#if defined (VXWORKS)
+ ACE_sema_t waiters_done_;
+#else
ACE_event_t waiters_done_;
+#endif /* VXWORKS */
// An auto reset event used by the broadcast/signal thread to wait
// for the waiting thread(s) to wake up and get a chance at the
// semaphore.
diff --git a/ace/OS.i b/ace/OS.i
index f59d21bf88d..d526d2e3ee4 100644
--- a/ace/OS.i
+++ b/ace/OS.i
@@ -1060,6 +1060,9 @@ ACE_OS::cond_destroy (ACE_cond_t *cv)
#elif defined (ACE_HAS_STHREADS)
ACE_OSCALL_RETURN (ACE_ADAPT_RETVAL (::cond_destroy (cv), ace_result_), int, -1);
#elif defined (ACE_HAS_WTHREADS) || defined (VXWORKS)
+#if defined (VXWORKS)
+ ACE_OS::sema_destroy (&cv->waiters_done_);
+#endif /* VXWORKS */
return ACE_OS::sema_destroy (&cv->sema_);
#endif /* ACE_HAS_STHREADS */
#else
@@ -1120,7 +1123,11 @@ ACE_OS::cond_init (ACE_cond_t *cv, int type, LPCTSTR name, void *arg)
result = -1;
else if (ACE_OS::mutex_init (&cv->waiters_lock_) = -1)
result = -1;
+#if defined (VXWORKS)
+ else if (ACE_OS::sema_init (&cv->waiters_done_, 0, type) == -1)
+#else
else if (ACE_OS::event_init (&cv->waiters_done_) == -1)
+#endif /* VXWORKS */
result = -1;
return result;
#endif /* ACE_HAS_STHREADS */
@@ -1190,7 +1197,11 @@ ACE_OS::cond_broadcast (ACE_cond_t *cv)
// Wait for all the awakened threads to acquire their part of the
// counting semaphore.
+#if defined (VXWORKS)
+ else if (ACE_OS::sema_wait (&cv->waiters_done_) == -1)
+#else
else if (ACE_OS::event_wait (&cv->waiters_done_) == -1)
+#endif /* VXWORKS */
result = -1;
this->was_broadcast_ = 0;
@@ -1255,7 +1266,11 @@ ACE_OS::cond_wait (ACE_cond_t *cv,
cv->waiters_--;
// Release the signaler/broadcaster if we're the last waiter.
if (cv->waiters_ == 0)
+#if defined (VXWORKS)
+ ACE_OS::sema_post (cv->waiters_done_);
+#else
ACE_OS::event_signal (cv->waiters_done_);
+#endif /* VXWORKS */
ACE_OS::mutex_unlock (cv->internal_mutex_);
}
}
@@ -1340,7 +1355,11 @@ ACE_OS::cond_timedwait (ACE_cond_t *cv,
cv->waiters_--;
// Release the signaler/broadcaster if we're the last waiter.
if (cv->waiters_ == 0)
+#if defined (VXWORKS)
+ ACE_OS::sema_post (cv->waiters_done_);
+#else
ACE_OS::event_signal (cv->waiters_done_);
+#endif /* VXWORKS */
ACE_OS::mutex_unlock (cv->internal_mutex_);
}
}
@@ -1451,7 +1470,11 @@ ACE_OS::cond_timedwait (ACE_cond_t *cv,
cv->waiters_--;
// Release the signaler/broadcaster if we're the last waiter.
if (cv->waiters_ == 0)
+#if defined (VXWORKS)
+ ACE_OS::sema_post (cv->waiters_done_);
+#else
ACE_OS::event_signal (cv->waiters_done_);
+#endif /* VXWORKS */
ACE_OS::thread_mutex_unlock (cv->internal_mutex_);
}
}
@@ -1514,7 +1537,11 @@ ACE_OS::cond_wait (ACE_cond_t *cv,
cv->waiters_--;
// Release the signaler/broadcaster if we're the last waiter.
if (cv->waiters_ == 0)
+#if defined (VXWORKS)
+ ACE_OS::sema_post (cv->waiters_done_);
+#else
ACE_OS::event_signal (cv->waiters_done_);
+#endif /* VXWORKS */
ACE_OS::thread_mutex_unlock (cv->internal_mutex_);
}
}