> Gary Mills wrote:
> > I'm still looking for the place where it gets
> blocked.
> 
> I've attached a simple dtrace hack that might help.
>  Save it as
> alrm.d", chmod +x, and run "./alrm.d -p
> <pid-of-server>".  (Or if
> running from a command line, "./alrm.d -c
> <command-line-and-args>".)

Thanks.  That script helped to confirm that there was
nothing in the FTP server code that either blocked or
unblocked SIGALRM.  I finally put a bit of code at the
beginning of the main() function in ftpd.c to syslog a
message when that signal was blocked.  On a moderately
busy anonymous FTP server, I found many instances
when that was the case.

Since the signal mask is inherited from the parent, it had
to be the parent, inetd in this case, that was at fault.
I confirmed this by inserting a wrapper between inetd
and in.ftpd that did nothing but set SIGALRM to its
default condition with sigset().  The FTP server never
reported any more instances of a blocked signal after
that.

I've filed bug report 6913800 for this issue.

I also tried to reproduce the problem under opensolaris,
where I have source, but was never able to do so.
I don't know what set of conditions would induce inetd
to block that signal.  Nevertheless, it does happen on
an active anonymous FTP server.

A fix for inetd is simply to set SIGALRM to its default
condition before exec()ing the child process.  A more
complete fix would be just to clear the signal mask at
that point.
-- 
This message posted from opensolaris.org
_______________________________________________
networking-discuss mailing list
networking-discuss@opensolaris.org

Reply via email to