From 74f0cf9b0f3afda2959c4e578c8044d75b905f8a Mon Sep 17 00:00:00 2001 From: Richard Gale Date: Fri, 20 Nov 2015 05:44:59 -0800 Subject: [PATCH] Adds support for pthread_cond_timedwait on iOS Calculates relative time and calls pthread_cond_timedwait_relative_np --- include/bx/sem.h | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/include/bx/sem.h b/include/bx/sem.h index 785bff3..7656494 100644 --- a/include/bx/sem.h +++ b/include/bx/sem.h @@ -83,14 +83,35 @@ namespace bx int result = pthread_mutex_lock(&m_mutex); BX_CHECK(0 == result, "pthread_mutex_lock %d", result); -# if BX_PLATFORM_NACL || BX_PLATFORM_OSX || BX_PLATFORM_IOS +# if BX_PLATFORM_NACL || BX_PLATFORM_OSX BX_UNUSED(_msecs); - BX_CHECK(-1 == _msecs, "NaCl, iOS and OSX don't support pthread_cond_timedwait at this moment."); + BX_CHECK(-1 == _msecs, "NaCl and OSX don't support pthread_cond_timedwait at this moment."); while (0 == result - && 0 >= m_count) + && 0 >= m_count) { result = pthread_cond_wait(&m_cond, &m_mutex); } +# elif BX_PLATFORM_IOS + if (-1 == _msecs) + { + while (0 == result + && 0 >= m_count) + { + result = pthread_cond_wait(&m_cond, &m_mutex); + } + } + else + { + timespec ts; + ts.tv_sec = _msecs/1000; + ts.tv_nsec = (_msecs%1000)*1000; + + while (0 == result + && 0 >= m_count) + { + result = pthread_cond_timedwait_relative_np(&m_cond, &m_mutex, &ts); + } + } # else timespec ts; clock_gettime(CLOCK_REALTIME, &ts);