Re: [PATCH] git daemon: avoid calling syslog() from a signal handler
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jul 5, 2008, 07:34 UTC
- Message-ID
- <7vej68u6mr.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <alpine.DEB.1.00.0807031624020.9925@racer>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> Signal handlers should never call syslog(), as that can raise signals > of its own. > > Instead, call the syslog() from the master process.
Earlier parts seem to make sense but I am puzzled by these changes.
Show 18 quoted lines
> @@ -929,7 +945,8 @@ static int service_loop(int socknum, int *socklist)
> for (;;) {
> int i;
>
> - if (poll(pfd, socknum, -1) < 0) {
> + i = poll(pfd, socknum, 1);
> + if (i < 0) {
> if (errno != EINTR) {
> error("poll failed, resuming: %s",
> strerror(errno));
> @@ -937,6 +954,10 @@ static int service_loop(int socknum, int *socklist)
> }
> continue;
> }
> + if (i == 0) {
> + check_dead_children();
> + continue;
> + }So you will check every 1ms to see if there are new dead children, but why is this necessary?