read/write etc. shall be signal-safe, and take cancel_lock, so we have to defer signal delivery while holding cancel_lock.
Reported-by: Brent Baccala <[email protected]> 's Claude assistant --- sysdeps/htl/pt-cond-timedwait.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sysdeps/htl/pt-cond-timedwait.c b/sysdeps/htl/pt-cond-timedwait.c index d350868c2b..7a5287ca9f 100644 --- a/sysdeps/htl/pt-cond-timedwait.c +++ b/sysdeps/htl/pt-cond-timedwait.c @@ -205,6 +205,7 @@ __pthread_cond_timedwait_internal (pthread_cond_t *cond, /* We're almost done. Remove the unblock hook, restore the previous cancellation type, and check for a pending cancellation request. */ + HURD_CRITICAL_BEGIN; __pthread_mutex_lock (&self->cancel_lock); self->cancel_hook = NULL; self->cancel_hook_arg = NULL; @@ -212,6 +213,7 @@ __pthread_cond_timedwait_internal (pthread_cond_t *cond, cancelled = (self->cancel_state == PTHREAD_CANCEL_ENABLE) && self->cancel_pending; __pthread_mutex_unlock (&self->cancel_lock); + HURD_CRITICAL_END; /* Reacquire MUTEX before returning/cancelling. */ __pthread_mutex_lock (mutex); -- 2.51.0
