summaryrefslogtreecommitdiff
path: root/ACE/ace/OS_NS_Thread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/ace/OS_NS_Thread.cpp')
-rw-r--r--ACE/ace/OS_NS_Thread.cpp27
1 files changed, 21 insertions, 6 deletions
diff --git a/ACE/ace/OS_NS_Thread.cpp b/ACE/ace/OS_NS_Thread.cpp
index 8a052271775..5fbdf5add9b 100644
--- a/ACE/ace/OS_NS_Thread.cpp
+++ b/ACE/ace/OS_NS_Thread.cpp
@@ -17,6 +17,9 @@
#include "ace/Thread_Mutex.h"
#include "ace/Condition_Thread_Mutex.h"
#include "ace/Guard_T.h"
+#ifdef ACE_HAS_GETTID
+# include "ace/OS_NS_sys_resource.h" // syscall for gettid impl
+#endif
extern "C" void
ACE_MUTEX_LOCK_CLEANUP_ADAPTER_NAME (void *args)
@@ -1153,7 +1156,7 @@ ACE_OS::cond_broadcast (ACE_cond_t *cv)
result = -1;
// Wait for all the awakened threads to acquire their part of
// the counting semaphore.
-# if defined (ACE_VXWORKS)
+# if defined (ACE_VXWORKS) || defined (ACE_MQX)
else if (ACE_OS::sema_wait (&cv->waiters_done_) == -1)
# else
else if (ACE_OS::event_wait (&cv->waiters_done_) == -1)
@@ -1177,7 +1180,7 @@ ACE_OS::cond_destroy (ACE_cond_t *cv)
# if defined (ACE_HAS_THREADS)
# if defined (ACE_HAS_WTHREADS)
ACE_OS::event_destroy (&cv->waiters_done_);
-# elif defined (ACE_VXWORKS)
+# elif defined (ACE_VXWORKS) || defined (ACE_MQX)
ACE_OS::sema_destroy (&cv->waiters_done_);
# endif /* ACE_VXWORKS */
int result = 0;
@@ -1227,7 +1230,7 @@ ACE_OS::cond_init (ACE_cond_t *cv, short type, const char *name, void *arg)
result = -1;
else if (ACE_OS::thread_mutex_init (&cv->waiters_lock_) == -1)
result = -1;
-# if defined (ACE_VXWORKS)
+# if defined (ACE_VXWORKS) || defined (ACE_MQX)
else if (ACE_OS::sema_init (&cv->waiters_done_, 0, type) == -1)
# else
else if (ACE_OS::event_init (&cv->waiters_done_) == -1)
@@ -1257,7 +1260,7 @@ ACE_OS::cond_init (ACE_cond_t *cv, short type, const wchar_t *name, void *arg)
result = -1;
else if (ACE_OS::thread_mutex_init (&cv->waiters_lock_) == -1)
result = -1;
-# if defined (ACE_VXWORKS)
+# if defined (ACE_VXWORKS) || defined (ACE_MQX)
else if (ACE_OS::sema_init (&cv->waiters_done_, 0, type) == -1)
# else
else if (ACE_OS::event_init (&cv->waiters_done_) == -1)
@@ -1388,7 +1391,7 @@ ACE_OS::cond_wait (ACE_cond_t *cv,
// If we're the last waiter thread during this particular broadcast
// then let all the other threads proceed.
else if (last_waiter)
-# if defined (ACE_VXWORKS)
+# if defined (ACE_VXWORKS) || defined (ACE_MQX)
ACE_OS::sema_post (&cv->waiters_done_);
# else
ACE_OS::event_signal (&cv->waiters_done_);
@@ -1416,7 +1419,7 @@ ACE_OS::cond_timedwait (ACE_cond_t *cv,
// Handle the easy case first.
if (timeout == 0)
return ACE_OS::cond_wait (cv, external_mutex);
-# if defined (ACE_HAS_WTHREADS) || defined (ACE_VXWORKS)
+# if defined (ACE_HAS_WTHREADS) || defined (ACE_VXWORKS) || defined (ACE_MQX)
// Prevent race conditions on the <waiters_> count.
if (ACE_OS::thread_mutex_lock (&cv->waiters_lock_) != 0)
@@ -1478,6 +1481,8 @@ ACE_OS::cond_timedwait (ACE_cond_t *cv,
int const ticks_per_sec = ::sysClkRateGet ();
int const ticks = msec_timeout * ticks_per_sec / ACE_ONE_SECOND_IN_MSECS;
result = ::semTake (cv->sema_.sema_, ticks);
+# else
+ result = ACE_OS::sema_wait (&cv->sema_, timeout);
# endif /* ACE_WIN32 || VXWORKS */
}
@@ -4806,6 +4811,16 @@ ACE_OS::unique_name (const void *object,
}
#endif
+pid_t
+ACE_OS::thr_gettid ()
+{
+#ifdef ACE_HAS_GETTID
+ return syscall (SYS_gettid);
+#else
+ ACE_NOTSUP_RETURN (-1);
+#endif
+}
+
ACE_END_VERSIONED_NAMESPACE_DECL
#if defined (ACE_VXWORKS) && !defined (__RTP__)