From owner-freebsd-bugs@FreeBSD.ORG Wed Sep 20 15:01:06 2006 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 64C4016A403 for ; Wed, 20 Sep 2006 15:01:06 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id EBA2543E19 for ; Wed, 20 Sep 2006 15:00:45 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k8KF0jP9049697 for ; Wed, 20 Sep 2006 15:00:45 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id k8KF0jIa049696; Wed, 20 Sep 2006 15:00:45 GMT (envelope-from gnats) Resent-Date: Wed, 20 Sep 2006 15:00:45 GMT Resent-Message-Id: <200609201500.k8KF0jIa049696@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Mike Tisdell Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5184216A4A0 for ; Wed, 20 Sep 2006 14:56:23 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [216.136.204.117]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0D34243DD5 for ; Wed, 20 Sep 2006 14:55:12 +0000 (GMT) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.13.1/8.13.1) with ESMTP id k8KEtCbd017848 for ; Wed, 20 Sep 2006 14:55:12 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.13.1/8.13.1/Submit) id k8KEtCRl017847; Wed, 20 Sep 2006 14:55:12 GMT (envelope-from nobody) Message-Id: <200609201455.k8KEtCRl017847@www.freebsd.org> Date: Wed, 20 Sep 2006 14:55:12 GMT From: Mike Tisdell To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-2.3 Cc: Subject: misc/103430: sleep() in a pthread returns prematurely when a signal is recv. X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Sep 2006 15:01:06 -0000 >Number: 103430 >Category: misc >Synopsis: sleep() in a pthread returns prematurely when a signal is recv. >Confidential: no >Severity: serious >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Sep 20 15:00:45 GMT 2006 >Closed-Date: >Last-Modified: >Originator: Mike Tisdell >Release: 5.5.x >Organization: Netronix >Environment: FreeBSD shuttle.netronix.com 5.5-PRERELEASE FreeBSD 5.5-PRERELEASE #5: Wed May 17 05:19:04 PDT 2006 root@shuttle.netronix.com:/usr/src/sys/i386/compile/SHUTTLE i386 FreeBSD ns4.keypointcu.com 5.5-STABLE FreeBSD 5.5-STABLE #5: Mon Aug 21 15:04:27 PDT 2006 mike@ns4.keypointcu.com:/usr/src/sys/i386/compile/NS4 i386 >Description: sleep() in a pthreaded function will return immediately if the program receives a signal. >How-To-Repeat: Run the following program and then SIGHUP the process. Each SIGHUP will produce the output of both sighup() and pthread1(), but not main() i.e. the sleep timer in the main thread is working properly. /********************************************************************************************************* *** pthread.c *** *** Pthread sleep bug demonstration *** **********************************************************************************************************/ #include #include #include void *pthread1() { while(1) { printf("pthread1\n"); sleep(3600); } } void sighup() { printf("Received SIGHUP\n"); } void quit() { printf("Received signal, quiting!\n"); exit(0); } int main() { int rc; pthread_t thread1; pthread_attr_t thread1_attr; signal(SIGHUP, &sighup); signal(SIGQUIT, &quit); signal(SIGKILL, &quit); signal(SIGTERM, &quit); pthread_attr_init(&thread1_attr); rc = pthread_create(&thread1, NULL, pthread1, NULL); while(1) { printf("main\n"); sleep(3600); } return 0; } >Fix: >Release-Note: >Audit-Trail: >Unformatted: