From owner-cvs-all Tue Jun 27 14:30:20 2000 Delivered-To: cvs-all@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.ORG [204.216.27.21]) by hub.freebsd.org (Postfix) with ESMTP id 633D537C363; Tue, 27 Jun 2000 14:30:17 -0700 (PDT) (envelope-from jasone@FreeBSD.org) Received: (from jasone@localhost) by freefall.freebsd.org (8.9.3/8.9.2) id OAA69550; Tue, 27 Jun 2000 14:30:17 -0700 (PDT) (envelope-from jasone@FreeBSD.org) Message-Id: <200006272130.OAA69550@freefall.freebsd.org> From: Jason Evans Date: Tue, 27 Jun 2000 14:30:17 -0700 (PDT) To: cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/lib/libc_r/uthread pthread_private.h uthread_init.c uthread_sigwait.c X-FreeBSD-CVS-Branch: HEAD Sender: owner-cvs-all@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG jasone 2000/06/27 14:30:17 PDT Modified files: lib/libc_r/uthread pthread_private.h uthread_init.c uthread_sigwait.c Log: If multiple threads are blocked in sigwait() for the same signal that does not have a user-supplied signal handler, when a signal is delivered, one thread will receive the signal, and then the code reverts to having no signal handler for the signal. This can leave the other sigwait()ing threads stranded permanently if the signal is later ignored, or can result in process termination when the process should have delivered the signal to one of the threads in sigwait(). To fix this problem, maintain a count of sigwait()ers for each signal that has no default signal handler. Use the count to correctly install/uninstall dummy signal handlers. Reviewed by: deischen Revision Changes Path 1.42 +8 -1 src/lib/libc_r/uthread/pthread_private.h 1.24 +4 -1 src/lib/libc_r/uthread/uthread_init.c 1.14 +28 -5 src/lib/libc_r/uthread/uthread_sigwait.c To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message