glibc/sysdeps/unix
H.J. Lu 1cd6626a89 __check_pf: Add a cancellation cleanup handler [BZ #20975]
There are reports for hang in __check_pf:

https://github.com/JoeDog/siege/issues/4

It is reproducible only under specific configurations:

1. Large number of cores (>= 64) and large number of threads (> 3X of
the number of cores) with long lived socket connection.
2. Low power (frequency) mode.
3. Power management is enabled.

While holding lock, __check_pf calls make_request which calls __sendto
and __recvmsg.  Since __sendto and __recvmsg are cancellation points,
lock held by __check_pf won't be released and can cause deadlock when
thread cancellation happens in __sendto or __recvmsg.  Add a cancellation
cleanup handler for __check_pf to unlock the lock when cancelled by
another thread.  This fixes BZ #20975 and the siege hang issue.

(cherry picked from commit a443bd3fb2)
2023-05-23 14:53:23 -07:00
..
alpha
arm
bsd login: Hidden prototypes for _getpt, __ptsname_r, grantpt, unlockpt 2021-06-30 07:28:12 +02:00
i386
inet
mips
powerpc
sh
sysv/linux __check_pf: Add a cancellation cleanup handler [BZ #20975] 2023-05-23 14:53:23 -07:00
x86_64
confstr.h
get_child_max.c
getlogin_r.c
getlogin.c
getpagesize.c
grantpt.c login: Hidden prototypes for _getpt, __ptsname_r, grantpt, unlockpt 2021-06-30 07:28:12 +02:00
ifreq.c
Implies
make-syscalls.sh
Makefile
s-proto-cancel.S
s-proto.S
setxid.h
sockatmark.c
syscall-template.S
syscall.S
syscalls.list misc: Add time64 alias for ioctl 2021-07-21 11:58:09 +02:00
sysdep.h Linux: Explicitly disable cancellation checking in the dynamic loader 2021-05-10 10:31:41 +02:00