Sam Varshavchik wrote
> Ángel González writes:
> 
> > Kees Bakker wrote:
> > > * maildir/maildirwatch.c (maildirwatch_alloc): Use alarm() to kill
> > >   the process if FAMOpen() takes more than 15 seconds to return.
> > >   Should prevent a hung process if FAM/Gamin is fubared.
> >
> > Seems that a signal(SIGALRM, SIG_IGN); would have been a appropiate. If  
> > FAMOpen
> > failed with EINTR, courier would have been able to continue without dying.
> 
> No. The process is stuck somewhere in the innards of the gamin library.  
> Something is fundamentally broken with gamin on some Linux distros, but not  
> on others. Gamin on Fedora is just fine, but, apparently, on Debian and  
> Debian derivatives it keeps getting hung when opening a domain socket. The  
> process will hang forever, until something kills it.

My point was that the piece inside fam where it got stuck is a
connect(2). A signal(SIGALRM, SIG_IGN);* would make the connect() fail
with EINTR, and assuming that fam would return to the caller, that would
end up at the if (< 0) path.

* Actually, it would be better to use sigaction() in order to ensure it
doesn't have SA_RESTART flag (signal(2) may have both behaviors).

However, the proposal of printing an error message and exit() may be a
better idea.

Kees patch looks good to me (although the signum comparison is
redundant).



------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk
_______________________________________________
Courier-imap mailing list
Courier-imap@lists.sourceforge.net
Unsubscribe: https://lists.sourceforge.net/lists/listinfo/courier-imap

Reply via email to