diff --git a/include/bx/macros.h b/include/bx/macros.h index 8e7b45f..3a82d7d 100644 --- a/include/bx/macros.h +++ b/include/bx/macros.h @@ -107,7 +107,7 @@ #endif // BX_CONFIG_CRT_FILE_READER_WRITER #ifndef BX_CONFIG_SEMAPHORE_PTHREAD -# define BX_CONFIG_SEMAPHORE_PTHREAD 0 +# define BX_CONFIG_SEMAPHORE_PTHREAD BX_PLATFORM_OSX|BX_PLATFORM_IOS #endif // BX_CONFIG_SEMAPHORE_PTHREAD #endif // __BX_MACROS_H__ diff --git a/include/bx/sem.h b/include/bx/sem.h index e7f1db6..81d936c 100644 --- a/include/bx/sem.h +++ b/include/bx/sem.h @@ -75,6 +75,14 @@ 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_CHECK(-1 == _msecs, "NaCl and OSX don't support pthread_cond_timedwait at this moment."); + while (0 == result + && 0 >= m_count) + { + result = pthread_cond_wait(&m_cond, &m_mutex); + } +# else timespec ts; clock_gettime(CLOCK_REALTIME, &ts); ts.tv_sec += _msecs/1000; @@ -85,7 +93,7 @@ namespace bx { result = pthread_cond_timedwait(&m_cond, &m_mutex, &ts); } - +# endif // BX_PLATFORM_NACL || BX_PLATFORM_OSX bool ok = 0 == result; if (ok)