Skip site navigation (1)Skip section navigation (2)
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>