< prev index next >

src/os/posix/vm/os_posix.cpp

Print this page

        

@@ -1048,22 +1048,28 @@
   }
 }
 
 void PosixSemaphore::wait() {
   int ret;
-  while ((ret = sem_wait(&_semaphore)) == -1 && errno == EINTR) {
-    // Retry if the wait was interrupted by a signal.
-  }
+
+  do {
+    ret = sem_wait(&_semaphore);
+  } while (ret != 0 && errno == EINTR);
+
   assert_with_errno(ret == 0, "sem_wait failed");
 }
 
 bool PosixSemaphore::trywait() {
-  bool succeeded = sem_trywait(&_semaphore) == 0;
+  int ret;
+
+  do {
+    ret = sem_trywait(&_semaphore);
+  } while (ret != 0 && errno == EINTR);
 
-  assert_with_errno(succeeded || errno == EAGAIN, "trywait failed");
+  assert_with_errno(ret == 0 || errno == EAGAIN, "trywait failed");
 
-  return succeeded;
+  return ret == 0;
 }
 
 bool PosixSemaphore::timedwait(const struct timespec ts) {
   while (true) {
     int result = sem_timedwait(&_semaphore, &ts);
< prev index next >