From ba402cd756a02cd80bcd76a2f7afc22ae2041c6c Mon Sep 17 00:00:00 2001 From: Jorropo Date: Wed, 4 Mar 2026 10:01:11 +0100 Subject: runtime: fix timespec definition on 32bits systems The nsec field of timespec is a C long even when using 64bits time on 32bits systems. This is because by timespec API if nsec never holds more than a second worth of nanoseconds. If it would theses would increment the sec field while the nsec field would get the amount of nanoseconds modulus a second. Fixes #77934 Change-Id: I9803998ba70123eb3b226379bd72b11cae972c38 Reviewed-on: https://go-review.googlesource.com/c/go/+/751341 Reviewed-by: Michael Pratt Auto-Submit: Jorropo Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI --- src/runtime/os_linux32.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/runtime/os_linux32.go') diff --git a/src/runtime/os_linux32.go b/src/runtime/os_linux32.go index 02cb18f32d..1ee1cdcaf9 100644 --- a/src/runtime/os_linux32.go +++ b/src/runtime/os_linux32.go @@ -31,7 +31,7 @@ func futex(addr unsafe.Pointer, op int32, val uint32, ts *timespec, addr2 unsafe var ts32 timespec32 var pts32 *timespec32 if ts != nil { - ts32.setNsec(ts.tv_sec*1e9 + ts.tv_nsec) + ts32.setNsec(ts.tv_sec*1e9 + int64(ts.tv_nsec)) pts32 = &ts32 } return futex_time32(addr, op, val, pts32, addr2, val3) @@ -53,14 +53,14 @@ func timer_settime(timerid int32, flags int32, new, old *itimerspec) int32 { var new32, old32 *itimerspec32 if new != nil { - newts.it_interval.setNsec(new.it_interval.tv_sec*1e9 + new.it_interval.tv_nsec) - newts.it_value.setNsec(new.it_value.tv_sec*1e9 + new.it_value.tv_nsec) + newts.it_interval.setNsec(new.it_interval.tv_sec*1e9 + int64(new.it_interval.tv_nsec)) + newts.it_value.setNsec(new.it_value.tv_sec*1e9 + int64(new.it_value.tv_nsec)) new32 = &newts } if old != nil { - oldts.it_interval.setNsec(old.it_interval.tv_sec*1e9 + old.it_interval.tv_nsec) - oldts.it_value.setNsec(old.it_value.tv_sec*1e9 + old.it_value.tv_nsec) + oldts.it_interval.setNsec(old.it_interval.tv_sec*1e9 + int64(old.it_interval.tv_nsec)) + oldts.it_value.setNsec(old.it_value.tv_sec*1e9 + int64(old.it_value.tv_nsec)) old32 = &oldts } -- cgit v1.3-5-g9baa