diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-02-10 23:06:33 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-02-11 00:32:44 +0100 |
commit | 8ba6ad703cb38ec57cdb473650ac289e5f8496d5 (patch) | |
tree | 843104571af29b6872721b6477d3b2e2444a3e96 /sysdeps/htl/pt-cond-timedwait.c | |
parent | cd7965bd970b0a298e734acc9dafae0a5db5f712 (diff) | |
download | glibc-8ba6ad703cb38ec57cdb473650ac289e5f8496d5.tar.gz glibc-8ba6ad703cb38ec57cdb473650ac289e5f8496d5.tar.xz glibc-8ba6ad703cb38ec57cdb473650ac289e5f8496d5.zip |
hurd: Add __pthread_spin_wait and use it
900778283ac3 ("htl: make pthread_spin_lock really spin") made pthread_spin_lock really spin and not block, but the current users of __pthread_spin_lock were assuming that it blocks, i.e. they use it as a lightweight mutex fitting in just one int. __pthread_spin_wait provides that support back.
Diffstat (limited to 'sysdeps/htl/pt-cond-timedwait.c')
-rw-r--r-- | sysdeps/htl/pt-cond-timedwait.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sysdeps/htl/pt-cond-timedwait.c b/sysdeps/htl/pt-cond-timedwait.c index 3a11e016d7..b5ce2f023e 100644 --- a/sysdeps/htl/pt-cond-timedwait.c +++ b/sysdeps/htl/pt-cond-timedwait.c @@ -50,7 +50,7 @@ cancel_hook (void *arg) pthread_cond_t *cond = ctx->cond; int unblock; - __pthread_spin_lock (&cond->__lock); + __pthread_spin_wait (&cond->__lock); /* The thread only needs to be awaken if it's blocking or about to block. If it was already unblocked, it's not queued any more. */ unblock = wakeup->prevp != NULL; @@ -112,7 +112,7 @@ __pthread_cond_timedwait_internal (pthread_cond_t *cond, the cancellation hook to simplify the cancellation procedure, i.e. if the thread is queued, it can be cancelled, otherwise it is already unblocked, progressing on the return path. */ - __pthread_spin_lock (&cond->__lock); + __pthread_spin_wait (&cond->__lock); __pthread_enqueue (&cond->__queue, self); if (cond->__attr != NULL) clock_id = cond->__attr->__clock; @@ -135,7 +135,7 @@ __pthread_cond_timedwait_internal (pthread_cond_t *cond, __pthread_block (self); } - __pthread_spin_lock (&cond->__lock); + __pthread_spin_wait (&cond->__lock); if (self->prevp == NULL) { /* Another thread removed us from the list of waiters, which means a |