On NetBSD tv_sec is already an int64 so no need for a test.
On OpenBSD, semasleep expects a Unix time as argument,
and 1<<30 is in 2004.
R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/
7810044
runtime·semasleep(int64 ns)
{
Timespec ts;
- int64 secs;
// spin-mutex lock
while(runtime·xchg(&m->waitsemalock, 1))
runtime·lwp_park(nil, 0, &m->waitsemacount, nil);
} else {
ns += runtime·nanotime();
- secs = ns/1000000000LL;
- // Avoid overflow
- if(secs > 1LL<<30)
- secs = 1LL<<30;
- ts.tv_sec = secs;
+ ts.tv_sec = ns/1000000000LL;
ts.tv_nsec = ns%1000000000LL;
// TODO(jsing) - potential deadlock!
// See above for details.
ns += runtime·nanotime();
secs = ns/1000000000LL;
// Avoid overflow
- if(secs > 1LL<<30)
- secs = 1LL<<30;
+ if(secs >= 1LL<<31)
+ secs = (1LL<<31) - 1;
ts.tv_sec = secs;
ts.tv_nsec = ns%1000000000LL;
runtime·thrsleep(&m->waitsemacount, CLOCK_REALTIME, &ts, &m->waitsemalock, nil);