From: Julian Seward Date: Sun, 13 Oct 2002 12:23:26 +0000 (+0000) Subject: Add sem_timedwait(). From Scott Smith . X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=74469a5eca84e4af4dd6a867ea50cde5b3c4bcfc;p=thirdparty%2Fvalgrind.git Add sem_timedwait(). From Scott Smith . MERGE TO HEAD git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_1_0_BRANCH@1218 --- diff --git a/vg_libpthread.c b/vg_libpthread.c index 17ab75fb23..d4bc427511 100644 --- a/vg_libpthread.c +++ b/vg_libpthread.c @@ -2609,6 +2609,31 @@ int sem_destroy(sem_t * sem) } +int sem_timedwait(sem_t* sem, const struct timespec *abstime) +{ + int res; + vg_sem_t* vg_sem; + ensure_valgrind("sem_timedwait"); + vg_sem = se_remap(sem); + res = __pthread_mutex_lock(&vg_sem->se_mx); + my_assert(res == 0); + while ( vg_sem->count == 0 && res != ETIMEDOUT ) { + res = pthread_cond_timedwait(&vg_sem->se_cv, &vg_sem->se_mx, abstime); + } + if ( vg_sem->count > 0 ) { + vg_sem->count--; + res = __pthread_mutex_unlock(&vg_sem->se_mx); + my_assert(res == 0 ); + return 0; + } else { + res = __pthread_mutex_unlock(&vg_sem->se_mx); + my_assert(res == 0 ); + *(__errno_location()) = ETIMEDOUT; + return -1; + } +} + + /* --------------------------------------------------------------------- Reader-writer locks. ------------------------------------------------------------------ */ diff --git a/vg_libpthread_unimp.c b/vg_libpthread_unimp.c index 458c1a06f4..777b5c89ad 100644 --- a/vg_libpthread_unimp.c +++ b/vg_libpthread_unimp.c @@ -157,7 +157,7 @@ void pthread_rwlockattr_setkind_np ( void ) { unimp("pthread_rwlockattr_setkind //void raise ( void ) { unimp("raise"); } void sem_close ( void ) { unimp("sem_close"); } void sem_open ( void ) { unimp("sem_open"); } -void sem_timedwait ( void ) { unimp("sem_timedwait"); } +//void sem_timedwait ( void ) { unimp("sem_timedwait"); } void sem_unlink ( void ) { unimp("sem_unlink"); } //void sigaction ( void ) { unimp("sigaction"); } //void siglongjmp ( void ) { unimp("siglongjmp"); }