THRIFT-736. cpp: Check for availability of pthread_mutex_timedlock
authorDavid Reiss <dreiss@apache.org>
Mon, 22 Mar 2010 02:34:57 +0000 (02:34 +0000)
committerDavid Reiss <dreiss@apache.org>
Mon, 22 Mar 2010 02:34:57 +0000 (02:34 +0000)
r920679 introduced a call to pthread_mutex_timedlock, which is not
available on all UNIX variants.  In particular, it is missing on Mac OS.
Add a preprocessor check for the relevant feature macro.  If it fails,
just use a trylock.

git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@925940 13f79535-47bb-0310-9956-ffa450edef68

lib/cpp/src/concurrency/Mutex.cpp

index d72267d..6d71710 100644 (file)
@@ -135,6 +135,7 @@ class Mutex::impl {
   bool trylock() const { return (0 == pthread_mutex_trylock(&pthread_mutex_)); }
 
   bool timedlock(int64_t milliseconds) const {
+#if defined(_POSIX_TIMEOUTS) && _POSIX_TIMEOUTS >= 200112L
     PROFILE_MUTEX_START_LOCK();
 
     struct timespec ts;
@@ -147,6 +148,11 @@ class Mutex::impl {
 
     PROFILE_MUTEX_NOT_LOCKED();
     return false;
+#else
+    // If pthread_mutex_timedlock isn't supported, the safest thing to do
+    // is just do a nonblocking trylock.
+    return trylock();
+#endif
   }
 
   void unlock() const {