1
0
mirror of https://github.com/golang/go synced 2024-11-17 23:04:56 -07:00

runtime: don't mlock on Ubuntu 5.4 systems

For #35777
For #37436
Fixes #40184

Change-Id: I68561497d9258e994d1c6c48d4fb41ac6130ee3a
Reviewed-on: https://go-review.googlesource.com/c/go/+/244059
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
Ian Lance Taylor 2020-07-21 21:37:58 -07:00
parent 11f92e9dae
commit 71218dbc40

View File

@ -7,7 +7,10 @@
package runtime
import "runtime/internal/atomic"
import (
"runtime/internal/atomic"
"unsafe"
)
//go:noescape
func uname(utsname *new_utsname) int
@ -55,6 +58,36 @@ func osArchInit() {
return
}
if major == 5 && minor == 4 && patch < 2 {
// All 5.4 versions of Ubuntu are patched.
procVersion := []byte("/proc/version\000")
f := open(&procVersion[0], _O_RDONLY, 0)
if f >= 0 {
var buf [512]byte
p := noescape(unsafe.Pointer(&buf[0]))
n := read(f, p, int32(len(buf)))
closefd(f)
needle := []byte("Ubuntu")
contains:
for i, c := range buf[:n] {
if c != needle[0] {
continue
}
if int(n)-i < len(needle) {
break
}
for j, c2 := range needle {
if c2 != buf[i+j] {
continue contains
}
}
// This is an Ubuntu system.
return
}
}
}
if major == 5 && (minor == 2 || minor == 3 && patch < 15 || minor == 4 && patch < 2) {
gsignalInitQuirk = mlockGsignal
if m0.gsignal != nil {