Subject: Re: usleep doesn't work
To: None <entropy@zippy.bernstein.com>
From: maximum entropy <entropy@zippy.bernstein.com>
List: current-users
Date: 08/18/1997 05:44:22
>From: maximum entropy <entropy@zippy.bernstein.com>
>
>>From: Rick Byers <rickb@iaw.on.ca>
>>
>>usleep() on my NetBSD-1.2G/i386 (Aug 14) appears to be broken. A call to
>>usleep(15000000) sleeps for 15 seconds on my NetBSD-1.2.1 box, but
>>promptly returns on my -current machine. Does this happen to others as
>>well? I'm just going to use nanosleep, but usleep being broken would
>>probably mess up some other things.
>
>I can verify that usleep((unsigned int)15000000) returns immediately,
>on NetBSD/i386 from around Aug 11.
>
>On NetBSD/vax from Aug 16 I cannot reproduce this.
>
>So, most likely either it's an i386-specific bug, or it's been fixed
>recently.
It doesn't seem to be i386-specific, I think the libc on my vax is out
of date e.g. still using the old usleep() implementation.
It seems to be a simple integer overflow. Please try the following
patch:
--- /usr/src/lib/libc/gen/usleep.c Tue Jul 22 07:12:44 1997
+++ ./usleep.c Mon Aug 18 05:37:53 1997
@@ -55,8 +55,8 @@
{
struct timespec ts;
- ts.tv_sec = 0;
- ts.tv_nsec = useconds * 1000;
+ ts.tv_sec = useconds / 1000000;
+ ts.tv_nsec = (useconds % 1000000) * 1000;
nanosleep(&ts, NULL);
}
--
entropy -- it's not just a good idea, it's the second law.
This message may refer to a product containing software developed by
Christopher G. Demetriou for the NetBSD Project.