Cygwin: pthread_cond_timedwait: make sure to wait until abstime finishes

This commit is contained in:
Corinna Vinschen 2018-11-28 23:49:59 +01:00
parent 5eaa64f9d8
commit 0b868df147

View File

@ -2945,26 +2945,34 @@ extern "C" int
pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex, pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex,
const struct timespec *abstime) const struct timespec *abstime)
{ {
int err = 0;
LARGE_INTEGER timeout; LARGE_INTEGER timeout;
pthread_testcancel (); pthread_testcancel ();
__try __try
{ {
int err = __pthread_cond_wait_init (cond, mutex); err = __pthread_cond_wait_init (cond, mutex);
if (err) if (err)
return err; __leave;
do
{
err = pthread_convert_abstime ((*cond)->clock_id, abstime, &timeout); err = pthread_convert_abstime ((*cond)->clock_id, abstime, &timeout);
if (err) if (err)
return err; __leave;
return (*cond)->wait (*mutex, &timeout); err = (*cond)->wait (*mutex, &timeout);
} }
__except (NO_ERROR) {} while (err == ETIMEDOUT);
__endtry }
__except (NO_ERROR)
{
return EINVAL; return EINVAL;
} }
__endtry
return err;
}
extern "C" int extern "C" int
pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex) pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex)