[newlib-cygwin] Cygwin: pthread_cond_timedwait: make sure to wait until abstime finishes
Corinna Vinschen
corinna@sourceware.org
Thu Nov 29 10:12:00 GMT 2018
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=0b868df147d613b6f277161eff4ac2834aa24ee7
commit 0b868df147d613b6f277161eff4ac2834aa24ee7
Author: Corinna Vinschen <corinna@vinschen.de>
Date: Wed Nov 28 23:49:59 2018 +0100
Cygwin: pthread_cond_timedwait: make sure to wait until abstime finishes
Diff:
---
winsup/cygwin/thread.cc | 24 ++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)
diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc
index 0bddaf3..c47a597 100644
--- a/winsup/cygwin/thread.cc
+++ b/winsup/cygwin/thread.cc
@@ -2945,25 +2945,33 @@ extern "C" int
pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex,
const struct timespec *abstime)
{
+ int err = 0;
LARGE_INTEGER timeout;
pthread_testcancel ();
__try
{
- int err = __pthread_cond_wait_init (cond, mutex);
+ err = __pthread_cond_wait_init (cond, mutex);
if (err)
- return err;
+ __leave;
- err = pthread_convert_abstime ((*cond)->clock_id, abstime, &timeout);
- if (err)
- return err;
+ do
+ {
+ err = pthread_convert_abstime ((*cond)->clock_id, abstime, &timeout);
+ if (err)
+ __leave;
- return (*cond)->wait (*mutex, &timeout);
+ err = (*cond)->wait (*mutex, &timeout);
+ }
+ while (err == ETIMEDOUT);
+ }
+ __except (NO_ERROR)
+ {
+ return EINVAL;
}
- __except (NO_ERROR) {}
__endtry
- return EINVAL;
+ return err;
}
extern "C" int
More information about the Cygwin-cvs
mailing list