aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/os_openbsd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/runtime/os_openbsd.c')
-rw-r--r--src/pkg/runtime/os_openbsd.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/src/pkg/runtime/os_openbsd.c b/src/pkg/runtime/os_openbsd.c
index 4c196e80b0..7468d01380 100644
--- a/src/pkg/runtime/os_openbsd.c
+++ b/src/pkg/runtime/os_openbsd.c
@@ -59,11 +59,11 @@ runtime·semacreate(void)
return 1;
}
+#pragma textflag 7
int32
runtime·semasleep(int64 ns)
{
Timespec ts;
- int64 secs;
// spin-mutex lock
while(runtime·xchg(&m->waitsemalock, 1))
@@ -78,12 +78,8 @@ runtime·semasleep(int64 ns)
runtime·thrsleep(&m->waitsemacount, 0, nil, &m->waitsemalock, nil);
else {
ns += runtime·nanotime();
- secs = ns/1000000000LL;
- // Avoid overflow
- if(secs >= 1LL<<31)
- secs = (1LL<<31) - 1;
- ts.tv_sec = secs;
- ts.tv_nsec = ns%1000000000LL;
+ ts.tv_nsec = 0;
+ ts.tv_sec = runtime·timediv(ns, 1000000000, (int32*)ts.tv_nsec);
runtime·thrsleep(&m->waitsemacount, CLOCK_REALTIME, &ts, &m->waitsemalock, nil);
}
// reacquire lock