Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Apr 1998 21:52:06 -0400
From:      Adrian Colley <aecolley@world.std.com>
To:        Kyle McPeek <kyle@stdio.com>
Cc:        aecolley@alembic.isegoria.com, freebsd-hackers@FreeBSD.ORG
Subject:   Re: portmap problem... 
Message-ID:  <E0yPHMy-0003zP-00.fnord@alembic.isegoria.com>
In-Reply-To: Your message of "Mon, 13 Apr 1998 16:28:24 EDT."

next in thread | raw e-mail | index | archive | help
> Apr  2 20:51:48 harp portmap[110]: svc_run: - select failed: No child 
> processes

> I have child_max set to 128 and the limits for daemon set to infinity.
> Any thing else I should do?  Any ideas?

The rational explanation I offer is that SIGCHLD is being delivered to
portmap at the same time as its return from select with a different
error.  The reap() function (portmap.c) runs wait3() in a while loop
until eventually it returns -1 and sets errno to ECHILD.  Back to the
caller, and select, returning -1, has its errno overwritten (it was
probably EINTR).

Timer granularity means that this kind of race cannot really happen, so
the interrupt must be delivered as select returns to user mode.  In fact,
it's almost certain that the delivery of SIGCHLD caused the select to
wakeup.

portmap probably should restore errno in reap().  It's odd that this
doesn't happen more often, isn't it?  Have I made a basic mistake in
my analysis?

 --adrian.



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E0yPHMy-0003zP-00.fnord>