Subject: CVS commit: src/lib/libpthread
To: None <source-changes@NetBSD.org>
From: Chuck Cranor <chuck@netbsd.org>
List: source-changes
Date: 06/12/2006 16:45:14
Module Name:	src
Committed By:	chuck
Date:		Mon Jun 12 16:45:14 UTC 2006

Modified Files:
	src/lib/libpthread: pthread_sig.c

Log Message:
sigtimedwait: if we collect a queued signal via pt_siglist, do not
forget to clear it out of pt_siglist, otherwise we will keep getting
it over and over again.   fixes a problem introduced in rev 1.43.

problem observed with mysqld where sending it a SIGHUP after it has
set an alarm (e.g. due to some package like rt3 using it) caused the
signal handler thread to go into a tight loop (collecting a SIGALRM
[via sigwait() in mysqld.cc] that would not go away due to the above
issue).   mysqld appears to get a SIGHUP when /etc/rc exits, so it
can go into this tight loop after a reboot (but not if you restart
it by hand).   the bad sequence is:
	/etc/rc runs:
		- starts mysqld
		- starts web server with rt3 fastcgi starts
		- fastcgi/rt3 talks to mysqld (causing it to set an alarm)
		- /etc/rc exits, SIGHUP goes to mysqld
		- mysqld catches SIGHUP, signal handler thread gets
			stuck in loop (database continues to operate, slowly).

you can also trigger the problem by sending mysqld a SIGHUP by hand after
you've caused it to set an alarm by connecting to it.


To generate a diff of this commit:
cvs rdiff -r1.45 -r1.46 src/lib/libpthread/pthread_sig.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.