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>