Cygwin: implement sem_clockwait

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2021-07-29 17:13:47 +02:00
parent d4e7869ee4
commit edf48054e9
5 changed files with 16 additions and 4 deletions

View File

@ -1287,6 +1287,7 @@ secure_getenv NOSIGFE
seed48 NOSIGFE
seekdir SIGFE
select = cygwin_select SIGFE
sem_clockwait SIGFE
sem_close SIGFE
sem_destroy SIGFE
sem_getvalue SIGFE

View File

@ -32,6 +32,9 @@ extern "C"
int sem_unlink (const char *__name);
int sem_wait (sem_t *__sem);
int sem_trywait (sem_t *__sem);
#if __GNU_VISIBLE
int sem_clockwait (sem_t *__sem, clockid_t __clock_id, const struct timespec *__abstime);
#endif
int sem_timedwait (sem_t *__sem, const struct timespec *__abstime);
int sem_post (sem_t *__sem);
int sem_getvalue (sem_t *__sem, int *__sval);

View File

@ -169,10 +169,16 @@ sem_trywait (sem_t * sem)
return semaphore::trywait (sem);
}
int
sem_clockwait (sem_t * sem, clockid_t clock_id, const struct timespec *abstime)
{
return semaphore::clockwait (sem, clock_id, abstime);
}
int
sem_timedwait (sem_t * sem, const struct timespec *abstime)
{
return semaphore::timedwait (sem, abstime);
return semaphore::clockwait (sem, CLOCK_REALTIME, abstime);
}
int

View File

@ -4002,7 +4002,8 @@ semaphore::trywait (sem_t *sem)
}
int
semaphore::timedwait (sem_t *sem, const struct timespec *abstime)
semaphore::clockwait (sem_t *sem, clockid_t clock_id,
const struct timespec *abstime)
{
LARGE_INTEGER timeout;
@ -4019,7 +4020,7 @@ semaphore::timedwait (sem_t *sem, const struct timespec *abstime)
__try
{
int err = pthread_convert_abstime (CLOCK_REALTIME, abstime, &timeout);
int err = pthread_convert_abstime (clock_id, abstime, &timeout);
if (err)
return err;

View File

@ -679,7 +679,8 @@ public:
static int post (sem_t *sem);
static int getvalue (sem_t *sem, int *sval);
static int trywait (sem_t *sem);
static int timedwait (sem_t *sem, const struct timespec *abstime);
static int clockwait (sem_t *sem, clockid_t clock_id,
const struct timespec *abstime);
static int getinternal (sem_t *sem, int *sfd, unsigned long long *shash,
LUID *sluid, unsigned int *sval);