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 d72267d..6d71710 100644
--- a/lib/cpp/src/concurrency/Mutex.cpp
+++ b/lib/cpp/src/concurrency/Mutex.cpp
@@ -135,6 +135,7 @@
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 @@
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 {