From: David Reiss Date: Mon, 22 Mar 2010 02:34:57 +0000 (+0000) Subject: THRIFT-736. cpp: Check for availability of pthread_mutex_timedlock X-Git-Tag: 0.3.0~64 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=318a328aec8062d6edf5efcd41dc8702a8595253;p=common%2Fthrift.git THRIFT-736. cpp: Check for availability of pthread_mutex_timedlock 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 --- diff --git a/lib/cpp/src/concurrency/Mutex.cpp b/lib/cpp/src/concurrency/Mutex.cpp index d72267d8..6d717108 100644 --- a/lib/cpp/src/concurrency/Mutex.cpp +++ b/lib/cpp/src/concurrency/Mutex.cpp @@ -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 {