Date: Sun, 4 Apr 2010 19:51:40 +0200 From: Jilles Tjoelker <jilles@stack.nl> To: freebsd-arch@freebsd.org Subject: so_rcv_sx, deadlkres, SIGSTOP Message-ID: <20100404175140.GB40499@stack.nl>
next in thread | raw e-mail | index | archive | help
The SX locks so_snd_sx and so_rcv_sx can be legitimately held for arbitrary amounts of time, while waiting until a send or recv is possible. Any other threads wanting to send/recv on the socket will sleep interruptibly on the corresponding SX. If deadlkres is activated, it may detect a deadlock even though there is no problem. If a SIGSTOP or similar comes in while waiting until send/recv is possible, the SX is held across the suspension and noone will be able to send/recv on the socket until the process is resumed. On the other hand a thread waiting for the SX can be suspended without harm. Adding PBDRY to various sleeps may help but may also introduce other problems (SIGSTOP disturbing the functioning of the process more, possibly with stuff like SO_RCVTIMEO). Example (using the fact that fifos are implemented using sockets): term1% mkfifo testfifo term1% cat >testfifo term2% cat testfifo term3% cat testfifo Letting this sit for half an hour will trigger deadlkres. If the reader in term2 (started first) is suspended, the reader in term3 will not get any input written to the fifo. -- Jilles Tjoelker
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100404175140.GB40499>