Date: Tue, 20 Apr 1999 12:20:49 +0200 From: Graham Wheeler <gram@cdsec.com> To: hackers@freebsd.org Subject: Re: Using select() to implement a delay Message-ID: <371C5501.3AA0A34@cdsec.com> References: <199904200945.LAA28715@bowtie.nl> <371C53FE.3CE190C9@cdsec.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Marc van Kempen wrote:
>
> > Hi all
> >
> > I have an interesting problem. I have a routine to implement delays:
> >
> > void Sleep(int secs, int usecs = 0)
> > {
> > struct timeval tv;
> > tv.tv_sec = secs;
> > tv.tv_usec = usecs;
> > (void)select(0, 0, 0, 0, &tv);
> > }
> >
> > I am using this both because it gives better resolution than sleep(),
> > and also because it doesn't require the use of SIGALRM, while I am
> > using elsewhere.
> >
> > On my development machine, Sleep(60) does exactly what is expected. On
> > my clients machine, Sleep(60) returns immediately. Both are running
> > FreeBSD 2.2.7. I don't have access to the clients machine, which is
> > in another city, and has no development environment, so I can't run gdb,
> > although it may not give away anything in any case.
> >
> > Does anyone have any ideas why the one works and the other doesn't?
> >
>
> Did you try catching the return value from select, it might be getting a
> signal.
I'm starting to suspect that this is the case, and that the signal
is SIGCHLD. The process does spin off child processes, and there may be
some reason why these are terminating almost immediately on the client's
system but running to completion on ours. This seems like the only
sensible explanation that I can think of. It means there is still a
problem, but that it is nothing strange to do with select itself. I
didn't consider this a possibility at first because of the consistent
difference in behaviour; I would have expected the SIGCHLDs to have
a more erratic effect.
I've put some debug logs in the SIGCHLD handler, so I should have
confirmation within about half an hour.
--
Dr Graham Wheeler E-mail: gram@cdsec.com
Citadel Data Security Phone: +27(21)423-6065/6/7
Firewalls/Virtual Private Networks Fax: +27(21)24-3656
Internet/Intranet Network Specialists
Data Security Products WWW: http://www.cdsec.com/
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?371C5501.3AA0A34>
