NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
PR/59578 CVS commit: src/tests/lib/libc/sys
The following reply was made to PR kern/59578; it has been noted by GNATS.
From: "Taylor R Campbell" <riastradh%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc:
Subject: PR/59578 CVS commit: src/tests/lib/libc/sys
Date: Tue, 22 Sep 2026 13:32:24 +0000
Module Name: src
Committed By: riastradh
Date: Tue Sep 22 13:32:24 UTC 2026
Modified Files:
src/tests/lib/libc/sys: t_mkfifo.c
Log Message:
t_mkfifo: Add test for PR kern/59578.
The problem is:
thread A thread B
-------- --------
enter open("fifo", O_WRONLY)
-> fi_writers++
-> sleep since fi_readers == 0
enter open("fifo", O_RDONLY)
-> fi_readers++
-> return since fi_writers > 0
open succeeds with fd
enter close(fd)
-> fi_readers--
close succeeds
*SIGALRM*
-> fi_writers--
open fails with EINTR
At this point, a reader open() has succeeded with no corresponding
writer open() success, and if the writer retries, it will hang
because fi_readers is back to zero. Instead, when the reader open()
succeeds, it should cause the writer open() to succeed as well (and
handle the signal afterward).
Same problem occurs in with the reader/writer roles reversed.
PR kern/59578: open() hangs indefinitely on FIFO with frequent signal
interruption
Related bugs:
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=203162
https://bugs.python.org/issue25122
https://github.com/python/cpython/issues/137397
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/tests/lib/libc/sys/t_mkfifo.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