From owner-freebsd-questions@FreeBSD.ORG Thu Mar 6 13:46:30 2008 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4EDCE10656CB for ; Thu, 6 Mar 2008 13:46:30 +0000 (UTC) (envelope-from martin@dc.cis.okstate.edu) Received: from m.it.okstate.edu (m.it.okstate.edu [139.78.2.129]) by mx1.freebsd.org (Postfix) with ESMTP id 23C888FC12 for ; Thu, 6 Mar 2008 13:46:30 +0000 (UTC) (envelope-from martin@dc.cis.okstate.edu) Received: from dc.cis.okstate.edu (localhost.it.okstate.edu [127.0.0.1]) by m.it.okstate.edu (8.13.8/8.13.8) with ESMTP id m26DkTLS042008 for ; Thu, 6 Mar 2008 07:46:29 -0600 (CST) (envelope-from martin@dc.cis.okstate.edu) Message-Id: <200803061346.m26DkTLS042008@m.it.okstate.edu> to: freebsd-questions@freebsd.org Date: Thu, 06 Mar 2008 07:46:29 -0600 From: Martin McCormick Subject: Re: SIGHUP and Program Flow in a 6.2 Application X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Mar 2008 13:46:30 -0000 This actually turned out to be a red herring. One of the things I had to trace was an attempted read from /dev/ttyd0 in which I was trying to go past the actual read. This appears to be what thoroughly confused the trace. There was a logic error in the signal handler which caused it to never exit and that was what prevented further signals. It took me a while to figure all that out but it makes sense. In my tinkering with embedded systems and assembly-language programming, one often-times shuts off the interrupts first thing during an interrupt handler because disaster results if another interrupt comes in while one is setting up the jump vector, etc. The signal handler hides all those details, but it still has to take care of them. Anyway, when I fixed the logic of the handler, itself and did not try to trace it, it does work as one would expect. I appreciate the help as it made me think and re-examine what was happening. The man page more or less explains it if you know what to look for but it wasn't close enough to what was happening here to really help much. Derek Ragona writes: >Nothing needs to be in your handler function to continue running simply >return from your function. However, depending on the signal you may wish >to call the original signal handler. Signals like interrupts are chained >linked lists of handlers. You can choose to break the chain, and have only >your handler called, or keep the chain intact calling the other handlers. In this case, the chain appears to resume on return from the routine I called on SIGHUP.