NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
PR/59586 CVS commit: [netbsd-11] src
The following reply was made to PR standards/59586; it has been noted by GNATS.
From: "Martin Husemann" <martin%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc:
Subject: PR/59586 CVS commit: [netbsd-11] src
Date: Mon, 2 Feb 2026 19:41:51 +0000
Module Name: src
Committed By: martin
Date: Mon Feb 2 19:41:51 UTC 2026
Modified Files:
src/sys/kern [netbsd-11]: sys_sig.c
src/tests/lib/libc/sys [netbsd-11]: t_sigtimedwait.c
Log Message:
Pull up following revision(s) (requested by riastradh in ticket #175):
tests/lib/libc/sys/t_sigtimedwait.c: revision 1.3
tests/lib/libc/sys/t_sigtimedwait.c: revision 1.4
tests/lib/libc/sys/t_sigtimedwait.c: revision 1.5
sys/kern/sys_sig.c: revision 1.59
sys/kern/sys_sig.c: revision 1.60
sys/kern/sys_sig.c: revision 1.61
t_sigtimedwait: Spruce up and add tests for interruption by signal.
PR standards/59586: sigwaitinfo() returns ECANCELED instead of EINTR
- POSIX compliance violation
sigtimedwait(2): Return EINTR, not ECANCELED.
The return value ECANCELED was a vestige of the logic to implement
sigtimedwait(2) in the SA (scheduler activations) era of NetBSD
multithreading. It was meant to be used purely internally to
libpthread, not meant to leak outside to the caller of
sigtimedwait(2). But in the removal of SA in the newlock2 branch,
something got lost in translation and we wound up having
sigtimedwait(2) return ECANCELED when it should return EINTR when it
is interrupted by an unblocked signal that was not in the signal set
passed as an argument to wait for.
POSIX.1-2024 sigtimedwait(2) spec:
https://pubs.opengroup.org/onlinepubs/9799919799.2024edition/functions/sigtimedwait.html
PR standards/59586: sigwaitinfo() returns ECANCELED instead of EINTR
- POSIX compliance violation
sigtimedwait(2): Return EINTR, not zero, if interrupted.
sigtimedwait(2) should never return zero: zero is not a valid signal
number, and sigtimedwait(2) is only supposed to return a valid signal
number (one of the signals in the input set) or -1.
Previously, if there was a timeout and the call was interrupted with
ERESTART/EINTR for a signal other than one we're waiting for, the
logic would call copyout to update the timeout -- and overwrite the
error code we were supposed to return (ERESTART/EINTR) with the error
code of copyout, even if copyout succeeds, leading the syscall to
return the zero-initialized value of ksi.ksi_signo. This also had
the effect of completely neutering the ERESTART logic: instead of
restarting, it would just return 0.
Now we overwrite the error code only if copyout fails.
PR standards/59586: sigwaitinfo() returns ECANCELED instead of EINTR
- POSIX compliance violation
sigtimedwait(2): Clarify some comments.
No functional change intended.
PR standards/59586: sigwaitinfo() returns ECANCELED instead of EINTR
- POSIX compliance violation
To generate a diff of this commit:
cvs rdiff -u -r1.58 -r1.58.2.1 src/sys/kern/sys_sig.c
cvs rdiff -u -r1.2 -r1.2.52.1 src/tests/lib/libc/sys/t_sigtimedwait.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