From owner-freebsd-hackers@FreeBSD.ORG Wed Apr 11 15:58:45 2012 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A523C106566C for ; Wed, 11 Apr 2012 15:58:45 +0000 (UTC) (envelope-from rflynn@acsalaska.net) Received: from mailhub.rachie.is-a-geek.net (rachie.is-a-geek.net [66.230.99.27]) by mx1.freebsd.org (Postfix) with ESMTP id 5BBE18FC16 for ; Wed, 11 Apr 2012 15:58:45 +0000 (UTC) Received: from [127.0.0.1] (squeeze.lan.rachie.is-a-geek.net [192.168.2.30]) by mailhub.rachie.is-a-geek.net (Postfix) with ESMTP id 4F6407E818; Wed, 11 Apr 2012 07:58:43 -0800 (AKDT) Message-ID: <4F85AA17.9010107@acsalaska.net> Date: Wed, 11 Apr 2012 17:58:15 +0200 From: Mel Flynn User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20120327 Thunderbird/11.0.1 MIME-Version: 1.0 To: Konstantin Belousov References: <4F859112.5070005@acsalaska.net> <1334154373.1082.110.camel@revolution.hippie.lan> <20120411144703.GM2358@deviant.kiev.zoral.com.ua> In-Reply-To: <20120411144703.GM2358@deviant.kiev.zoral.com.ua> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: Ian Lepore , FreeBSD Hackers Subject: Re: Debugging zombies: pthread_sigmask and sigwait X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 Apr 2012 15:58:45 -0000 On 4/11/2012 16:47, Konstantin Belousov wrote: > What happens, as I guess it, the SIGINFO and SIGCHLD are ignored, so > kernel do not even bother to queue the signals to the master process. > Register a dummy signal handler for your signals with sigaction > before creating 'signal_handler' thread. Right on the mark. I've modified the test code accordingly and things work as expected. I've also applied the logic to the Zarafa spooler and in the logs I'm finally seeing: child: [79572] E-mail for user mel was accepted by SMTP server parent: [79565] Received signal 20 ^^^^^^^^^^^^^^^^^^ Many thanks and for the archives, the diff below sig. -- Mel diff -r 509d7301c720 spoolerbug/spoolerbug.c --- a/spoolerbug/spoolerbug.c Wed Apr 11 05:37:50 2012 -0800 +++ b/spoolerbug/spoolerbug.c Wed Apr 11 07:35:50 2012 -0800 @@ -12,6 +12,7 @@ #include /* vfork */ #include /* arc4random() */ +#include /* memset() */ #include #include @@ -25,6 +26,7 @@ void *signal_handler(void *); int running_server(void); void process_signal(int); +void signal_dummy(int); /* globals */ pthread_t signal_thread; @@ -112,6 +114,12 @@ } } +void +signal_dummy(int sig __unused) +{ + return; +} + int main(int argc, char *argv[]) { @@ -131,11 +139,19 @@ if( !bForked ) { + struct sigaction dummies; + + memset(&dummies, 0, sizeof(dummies)); sigemptyset(&signal_mask); sigaddset(&signal_mask, SIGTERM); sigaddset(&signal_mask, SIGINT); sigaddset(&signal_mask, SIGCHLD); sigaddset(&signal_mask, SIGINFO); + dummies.sa_handler = signal_dummy; + dummies.sa_mask = signal_mask; + dummies.sa_flags |= SA_NOCLDSTOP; + sigaction(SIGCHLD, &dummies, NULL); + sigaction(SIGINFO, &dummies, NULL); } daemon(1, 1);