NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
PR/59132 CVS commit: src/sys/kern
The following reply was made to PR kern/59132; it has been noted by GNATS.
From: "Taylor R Campbell" <riastradh%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc:
Subject: PR/59132 CVS commit: src/sys/kern
Date: Wed, 5 Mar 2025 14:01:55 +0000
Module Name: src
Committed By: riastradh
Date: Wed Mar 5 14:01:55 UTC 2025
Modified Files:
src/sys/kern: sys_futex.c
Log Message:
futex(2): Avoid returning early on timeout.
Rounding in the arithmetic leading into cv_timedwait_sig, and any
skew between the timecounter used by clock_gettime and the hardclock
timer used to wake cv_timedwait_sig, can lead cv_timedwait_sig to
wake up before the deadline as observable by clock_gettime.
futex(FUTEX_WAIT) is not supposed to do that, so ignore when
cv_timedwait_sig returns EWOULDBLOCK -- we'll notice the deadline has
passed in the next iteration anyway, if it has actually passed.
While here, make sure that we never pass less than 1 tick to
cv_timedwait_sig -- that turns it into cv_wait_sig, to wait
indefinitely with no timeout.
With this change, I have not seen any failures as reported in:
PR kern/59132: t_futex_ops:futex_wait_timeout_* sometimes fails on
early wakeup
Some instrumentation in futex_wait to count when cv_timedwait_sig
returns early as measured by clock_gettime (not committed in this
change, just local experiments) supports this hypothesis for the
symptoms observed in the PR.
To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 src/sys/kern/sys_futex.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Home |
Main Index |
Thread Index |
Old Index