int pthread_mutex_trylock(pthread_mutex_t *mutex) { int err = pthread_mutex_trylock_impl(mutex); if (PTHREAD_DEBUG_ENABLED) { if (!err) { pthread_debug_mutex_lock_check(mutex); } } return err; }
int pthread_mutex_lock_timeout_np(pthread_mutex_t *mutex, unsigned msecs) { int err = pthread_mutex_lock_timeout_np_impl(mutex, msecs); if (PTHREAD_DEBUG_ENABLED) { if (!err) { pthread_debug_mutex_lock_check(mutex); } } return err; }
int pthread_mutex_lock(pthread_mutex_t *mutex) { int err = pthread_mutex_lock_impl(mutex); #ifdef PTHREAD_DEBUG if (PTHREAD_DEBUG_ENABLED) { if (!err) { pthread_debug_mutex_lock_check(mutex); } } #endif return err; }
extern "C" int pthread_mutex_lock_timeout_np(pthread_mutex_t* mutex, unsigned ms) { timespec abs_timeout; clock_gettime(CLOCK_MONOTONIC, &abs_timeout); abs_timeout.tv_sec += ms / 1000; abs_timeout.tv_nsec += (ms % 1000) * 1000000; if (abs_timeout.tv_nsec >= 1000000000) { abs_timeout.tv_sec++; abs_timeout.tv_nsec -= 1000000000; } int err = __pthread_mutex_timedlock(mutex, &abs_timeout, CLOCK_MONOTONIC); if (err == ETIMEDOUT) { err = EBUSY; } if (PTHREAD_DEBUG_ENABLED) { if (!err) { pthread_debug_mutex_lock_check(mutex); } } return err; }