]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add sem_timedwait(). From Scott Smith <sls@cs.unt.edu>.
authorJulian Seward <jseward@acm.org>
Sun, 13 Oct 2002 12:23:26 +0000 (12:23 +0000)
committerJulian Seward <jseward@acm.org>
Sun, 13 Oct 2002 12:23:26 +0000 (12:23 +0000)
MERGE TO HEAD

git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_1_0_BRANCH@1218

vg_libpthread.c
vg_libpthread_unimp.c

index 17ab75fb23389946b18f267e1cc01e5c71d2d154..d4bc427511ad6240289f6e4d9756e78c54e62dcd 100644 (file)
@@ -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.
    ------------------------------------------------------------------ */
index 458c1a06f440f16680f97cf454f557ad70c79a8b..777b5c89adfbc06b1f6aedcc6c51e88b72a13614 100644 (file)
@@ -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"); }