Re: [CVS] commit

Date view Thread view Subject view Author view

From: Alexandre Oliva (oliva@dcc.unicamp.br)
Date: Wed Feb 03 1999 - 04:09:15 EST


On Feb 2, 1999, Godmar Back <gback@cs.utah.edu> wrote:

> This should have been it; but I don't really have a Solaris machine
> fast enough to test this in a reasonable amount of time.

I figured out the problem on Solaris: when interrupt() (called to
handle SIGCHLD, SIGVTALRM or any other signal) unblockAsyncSignals()s
and there is a pending SIGCHLD, the kernel immediately calls
interrupt() again. This recursive call will find instDisabled() and
not do anything, but the signal handler will keep being called until
SIGCHLD is handled.

It's not clear to me how to fix this :-(

Just special-casing the *ALRM signals wouldn't work, because at least
once I got interrupt() called to handle VTALRM and, when it was called
recursively, the signal to be handled was SIGCHLD.

Maybe the context-switcher should take care of unblocking signals
after the context switch, or interrupt should handle signals like
SIGCHLD even if intsDisabled()...

-- 
Alexandre Oliva  http://www.dcc.unicamp.br/~oliva  aoliva@{acm.org}
oliva@{dcc.unicamp.br,gnu.org,egcs.cygnus.com,samba.org}
Universidade Estadual de Campinas, SP, Brasil


Date view Thread view Subject view Author view

This archive was generated by hypermail 2b29 : Sat Sep 23 2000 - 19:57:54 EDT