Compare commits
16 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cb2277da6a | ||
|
|
fa97a7208b | ||
|
|
37bf4c8593 | ||
|
|
ffcc009a22 | ||
|
|
064a135101 | ||
|
|
dfcd9f17b5 | ||
|
|
a374886593 | ||
|
|
880c5f7f7e | ||
|
|
64f2601a86 | ||
|
|
bf244c6099 | ||
|
|
658947f3e0 | ||
|
|
d3b32c62a1 | ||
|
|
6390a97fc7 | ||
|
|
bccebc6a3a | ||
|
|
54e55e021d | ||
|
|
e1129ed8ec |
5 changed files with 256 additions and 9 deletions
13
.gitignore
vendored
13
.gitignore
vendored
|
|
@ -159,3 +159,16 @@
|
|||
/go1.23.4.src.tar.gz
|
||||
/go1.24rc1.src.tar.gz
|
||||
/go1.24rc2.src.tar.gz
|
||||
/go1.24rc3.src.tar.gz
|
||||
/go1.24.0.src.tar.gz
|
||||
/go1.24.1.src.tar.gz
|
||||
/go1.24.2.src.tar.gz
|
||||
/go1.24.3.src.tar.gz
|
||||
/go1.24.4.src.tar.gz
|
||||
/go1.24.5.src.tar.gz
|
||||
/go1.24.6.src.tar.gz
|
||||
/go1.24.7.src.tar.gz
|
||||
/go1.24.8.src.tar.gz
|
||||
/go1.24.9.src.tar.gz
|
||||
/go1.24.10.src.tar.gz
|
||||
/go1.24.11.src.tar.gz
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
This repository is maintained by packit.
|
||||
https://packit.dev/
|
||||
The file was generated using packit 0.104.1.post1.dev2+g8a1a06eb.
|
||||
The file was generated using packit 1.12.0.post1.dev20+g7d30dac21.
|
||||
|
|
|
|||
234
ff2636f.patch
Normal file
234
ff2636f.patch
Normal file
|
|
@ -0,0 +1,234 @@
|
|||
From ff2636f45e0087a1c6d8e895257d9c4729710811 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Pratt <mpratt@google.com>
|
||||
Date: Thu, 03 Apr 2025 03:26:25 +0000
|
||||
Subject: [PATCH] [release-branch.go1.24] runtime: cleanup M vgetrandom state before dropping P
|
||||
|
||||
When an M is destroyed, we put its vgetrandom state back on the shared
|
||||
list for another M to reuse. This list is simply a slice, so appending
|
||||
to the slice may allocate. Currently this operation is performed in
|
||||
mdestroy, after the P is released, meaning allocation is not allowed.
|
||||
|
||||
More the cleanup earlier in mdestroy when allocation is still OK.
|
||||
|
||||
Also add //go:nowritebarrierrec to mdestroy since it runs without a P,
|
||||
which would have caught this bug.
|
||||
|
||||
Fixes #73144.
|
||||
For #73141.
|
||||
|
||||
Change-Id: I6a6a636c3fbf5c6eec09d07a260e39dbb4d2db12
|
||||
Reviewed-on: https://go-review.googlesource.com/c/go/+/662455
|
||||
Reviewed-by: Jason Donenfeld <Jason@zx2c4.com>
|
||||
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
|
||||
Reviewed-by: Keith Randall <khr@golang.org>
|
||||
Reviewed-by: Keith Randall <khr@google.com>
|
||||
(cherry picked from commit 0b31e6d4cc804ab76ae8ced151ee2f50657aec14)
|
||||
---
|
||||
|
||||
diff --git a/src/runtime/os3_solaris.go b/src/runtime/os3_solaris.go
|
||||
index cf163a6..ded821b 100644
|
||||
--- a/src/runtime/os3_solaris.go
|
||||
+++ b/src/runtime/os3_solaris.go
|
||||
@@ -234,8 +234,11 @@
|
||||
getg().m.procid = 0
|
||||
}
|
||||
|
||||
-// Called from exitm, but not from drop, to undo the effect of thread-owned
|
||||
+// Called from mexit, but not from dropm, to undo the effect of thread-owned
|
||||
// resources in minit, semacreate, or elsewhere. Do not take locks after calling this.
|
||||
+//
|
||||
+// This always runs without a P, so //go:nowritebarrierrec is required.
|
||||
+//go:nowritebarrierrec
|
||||
func mdestroy(mp *m) {
|
||||
}
|
||||
|
||||
diff --git a/src/runtime/os_aix.go b/src/runtime/os_aix.go
|
||||
index 93464cb..1b483c2 100644
|
||||
--- a/src/runtime/os_aix.go
|
||||
+++ b/src/runtime/os_aix.go
|
||||
@@ -186,8 +186,11 @@
|
||||
getg().m.procid = 0
|
||||
}
|
||||
|
||||
-// Called from exitm, but not from drop, to undo the effect of thread-owned
|
||||
+// Called from mexit, but not from dropm, to undo the effect of thread-owned
|
||||
// resources in minit, semacreate, or elsewhere. Do not take locks after calling this.
|
||||
+//
|
||||
+// This always runs without a P, so //go:nowritebarrierrec is required.
|
||||
+//go:nowritebarrierrec
|
||||
func mdestroy(mp *m) {
|
||||
}
|
||||
|
||||
diff --git a/src/runtime/os_darwin.go b/src/runtime/os_darwin.go
|
||||
index 0ecbea7..6eab3b5 100644
|
||||
--- a/src/runtime/os_darwin.go
|
||||
+++ b/src/runtime/os_darwin.go
|
||||
@@ -344,8 +344,11 @@
|
||||
getg().m.procid = 0
|
||||
}
|
||||
|
||||
-// Called from exitm, but not from drop, to undo the effect of thread-owned
|
||||
+// Called from mexit, but not from dropm, to undo the effect of thread-owned
|
||||
// resources in minit, semacreate, or elsewhere. Do not take locks after calling this.
|
||||
+//
|
||||
+// This always runs without a P, so //go:nowritebarrierrec is required.
|
||||
+//go:nowritebarrierrec
|
||||
func mdestroy(mp *m) {
|
||||
}
|
||||
|
||||
diff --git a/src/runtime/os_dragonfly.go b/src/runtime/os_dragonfly.go
|
||||
index a02696e..9b32350 100644
|
||||
--- a/src/runtime/os_dragonfly.go
|
||||
+++ b/src/runtime/os_dragonfly.go
|
||||
@@ -216,8 +216,11 @@
|
||||
getg().m.procid = 0
|
||||
}
|
||||
|
||||
-// Called from exitm, but not from drop, to undo the effect of thread-owned
|
||||
+// Called from mexit, but not from dropm, to undo the effect of thread-owned
|
||||
// resources in minit, semacreate, or elsewhere. Do not take locks after calling this.
|
||||
+//
|
||||
+// This always runs without a P, so //go:nowritebarrierrec is required.
|
||||
+//go:nowritebarrierrec
|
||||
func mdestroy(mp *m) {
|
||||
}
|
||||
|
||||
diff --git a/src/runtime/os_linux.go b/src/runtime/os_linux.go
|
||||
index 8b3c4d0..fb46b81 100644
|
||||
--- a/src/runtime/os_linux.go
|
||||
+++ b/src/runtime/os_linux.go
|
||||
@@ -412,13 +412,12 @@
|
||||
getg().m.procid = 0
|
||||
}
|
||||
|
||||
-// Called from exitm, but not from drop, to undo the effect of thread-owned
|
||||
+// Called from mexit, but not from dropm, to undo the effect of thread-owned
|
||||
// resources in minit, semacreate, or elsewhere. Do not take locks after calling this.
|
||||
+//
|
||||
+// This always runs without a P, so //go:nowritebarrierrec is required.
|
||||
+//go:nowritebarrierrec
|
||||
func mdestroy(mp *m) {
|
||||
- if mp.vgetrandomState != 0 {
|
||||
- vgetrandomPutState(mp.vgetrandomState)
|
||||
- mp.vgetrandomState = 0
|
||||
- }
|
||||
}
|
||||
|
||||
// #ifdef GOARCH_386
|
||||
diff --git a/src/runtime/os_netbsd.go b/src/runtime/os_netbsd.go
|
||||
index 735ace2..a06e5fe 100644
|
||||
--- a/src/runtime/os_netbsd.go
|
||||
+++ b/src/runtime/os_netbsd.go
|
||||
@@ -320,8 +320,11 @@
|
||||
// must continue working after unminit.
|
||||
}
|
||||
|
||||
-// Called from exitm, but not from drop, to undo the effect of thread-owned
|
||||
+// Called from mexit, but not from dropm, to undo the effect of thread-owned
|
||||
// resources in minit, semacreate, or elsewhere. Do not take locks after calling this.
|
||||
+//
|
||||
+// This always runs without a P, so //go:nowritebarrierrec is required.
|
||||
+//go:nowritebarrierrec
|
||||
func mdestroy(mp *m) {
|
||||
}
|
||||
|
||||
diff --git a/src/runtime/os_openbsd.go b/src/runtime/os_openbsd.go
|
||||
index 574bfa8..4ce4c3c 100644
|
||||
--- a/src/runtime/os_openbsd.go
|
||||
+++ b/src/runtime/os_openbsd.go
|
||||
@@ -182,8 +182,11 @@
|
||||
getg().m.procid = 0
|
||||
}
|
||||
|
||||
-// Called from exitm, but not from drop, to undo the effect of thread-owned
|
||||
+// Called from mexit, but not from dropm, to undo the effect of thread-owned
|
||||
// resources in minit, semacreate, or elsewhere. Do not take locks after calling this.
|
||||
+//
|
||||
+// This always runs without a P, so //go:nowritebarrierrec is required.
|
||||
+//go:nowritebarrierrec
|
||||
func mdestroy(mp *m) {
|
||||
}
|
||||
|
||||
diff --git a/src/runtime/os_plan9.go b/src/runtime/os_plan9.go
|
||||
index 2dbb42a..3b5965a 100644
|
||||
--- a/src/runtime/os_plan9.go
|
||||
+++ b/src/runtime/os_plan9.go
|
||||
@@ -217,8 +217,11 @@
|
||||
func unminit() {
|
||||
}
|
||||
|
||||
-// Called from exitm, but not from drop, to undo the effect of thread-owned
|
||||
+// Called from mexit, but not from dropm, to undo the effect of thread-owned
|
||||
// resources in minit, semacreate, or elsewhere. Do not take locks after calling this.
|
||||
+//
|
||||
+// This always runs without a P, so //go:nowritebarrierrec is required.
|
||||
+//go:nowritebarrierrec
|
||||
func mdestroy(mp *m) {
|
||||
}
|
||||
|
||||
diff --git a/src/runtime/os_windows.go b/src/runtime/os_windows.go
|
||||
index 7183e79..54407a3 100644
|
||||
--- a/src/runtime/os_windows.go
|
||||
+++ b/src/runtime/os_windows.go
|
||||
@@ -906,9 +906,11 @@
|
||||
mp.procid = 0
|
||||
}
|
||||
|
||||
-// Called from exitm, but not from drop, to undo the effect of thread-owned
|
||||
+// Called from mexit, but not from dropm, to undo the effect of thread-owned
|
||||
// resources in minit, semacreate, or elsewhere. Do not take locks after calling this.
|
||||
//
|
||||
+// This always runs without a P, so //go:nowritebarrierrec is required.
|
||||
+//go:nowritebarrierrec
|
||||
//go:nosplit
|
||||
func mdestroy(mp *m) {
|
||||
if mp.highResTimer != 0 {
|
||||
diff --git a/src/runtime/proc.go b/src/runtime/proc.go
|
||||
index e9873e5..21bee4d 100644
|
||||
--- a/src/runtime/proc.go
|
||||
+++ b/src/runtime/proc.go
|
||||
@@ -1935,6 +1935,9 @@
|
||||
mp.gsignal = nil
|
||||
}
|
||||
|
||||
+ // Free vgetrandom state.
|
||||
+ vgetrandomDestroy(mp)
|
||||
+
|
||||
// Remove m from allm.
|
||||
lock(&sched.lock)
|
||||
for pprev := &allm; *pprev != nil; pprev = &(*pprev).alllink {
|
||||
diff --git a/src/runtime/vgetrandom_linux.go b/src/runtime/vgetrandom_linux.go
|
||||
index a6ec4b7..40be022 100644
|
||||
--- a/src/runtime/vgetrandom_linux.go
|
||||
+++ b/src/runtime/vgetrandom_linux.go
|
||||
@@ -73,9 +73,16 @@
|
||||
return state
|
||||
}
|
||||
|
||||
-func vgetrandomPutState(state uintptr) {
|
||||
+// Free vgetrandom state from the M (if any) prior to destroying the M.
|
||||
+//
|
||||
+// This may allocate, so it must have a P.
|
||||
+func vgetrandomDestroy(mp *m) {
|
||||
+ if mp.vgetrandomState == 0 {
|
||||
+ return
|
||||
+ }
|
||||
+
|
||||
lock(&vgetrandomAlloc.statesLock)
|
||||
- vgetrandomAlloc.states = append(vgetrandomAlloc.states, state)
|
||||
+ vgetrandomAlloc.states = append(vgetrandomAlloc.states, mp.vgetrandomState)
|
||||
unlock(&vgetrandomAlloc.statesLock)
|
||||
}
|
||||
|
||||
diff --git a/src/runtime/vgetrandom_unsupported.go b/src/runtime/vgetrandom_unsupported.go
|
||||
index 070392c..43c53e1 100644
|
||||
--- a/src/runtime/vgetrandom_unsupported.go
|
||||
+++ b/src/runtime/vgetrandom_unsupported.go
|
||||
@@ -13,6 +13,6 @@
|
||||
return -1, false
|
||||
}
|
||||
|
||||
-func vgetrandomPutState(state uintptr) {}
|
||||
+func vgetrandomDestroy(mp *m) {}
|
||||
|
||||
func vgetrandomInit() {}
|
||||
14
golang.spec
14
golang.spec
|
|
@ -100,8 +100,8 @@
|
|||
|
||||
# Comment out go_prerelease and go_patch as needed
|
||||
%global go_api 1.24
|
||||
%global go_prerelease rc2
|
||||
#global go_patch 4
|
||||
#global go_prerelease rc3
|
||||
%global go_patch 11
|
||||
|
||||
%global go_version %{go_api}%{?go_patch:.%{go_patch}}%{?go_prerelease:~%{go_prerelease}}
|
||||
%global go_source %{go_api}%{?go_patch:.%{go_patch}}%{?go_prerelease}
|
||||
|
|
@ -141,13 +141,13 @@ Provides: bundled(golang(golang.org/x/arch)) = 0.12.0
|
|||
Provides: bundled(golang(golang.org/x/build)) = 0.0.0.20241205234318.b850320af2a4
|
||||
Provides: bundled(golang(golang.org/x/crypto)) = 0.30.0
|
||||
Provides: bundled(golang(golang.org/x/mod)) = 0.22.0
|
||||
Provides: bundled(golang(golang.org/x/net)) = 0.32.1.0.20241206180132.552d8ac903a1
|
||||
Provides: bundled(golang(golang.org/x/net)) = 0.32.1.0.20250121202134.9a960c88dd98
|
||||
Provides: bundled(golang(golang.org/x/sync)) = 0.10.0
|
||||
Provides: bundled(golang(golang.org/x/sys)) = 0.28.0
|
||||
Provides: bundled(golang(golang.org/x/telemetry)) = 0.0.0.20241204182053.c0ac0e154df3
|
||||
Provides: bundled(golang(golang.org/x/term)) = 0.27.0
|
||||
Provides: bundled(golang(golang.org/x/text)) = 0.21.0
|
||||
Provides: bundled(golang(golang.org/x/tools)) = 0.28.0
|
||||
Provides: bundled(golang(golang.org/x/tools)) = 0.28.1.0.20250131145412.98746475647e
|
||||
Provides: bundled(golang(rsc.io/markdown)) = 0.0.0.20240306144322.0bf8f97ee8ef
|
||||
|
||||
Requires: %{name}-bin = %{version}-%{release}
|
||||
|
|
@ -155,10 +155,10 @@ Requires: %{name}-src = %{version}-%{release}
|
|||
Requires: go-filesystem
|
||||
|
||||
Patch1: 0001-Modify-go.env.patch
|
||||
Patch5: 0005-Skip-TestCrashDumpsAllThreads.patch
|
||||
Patch6: 0006-Default-to-ld.bfd-on-ARM64.patch
|
||||
Patch5: 0005-Skip-TestCrashDumpsAllThreads.patch
|
||||
Patch6: 0006-Default-to-ld.bfd-on-ARM64.patch
|
||||
# Related to https://gcc.gnu.org/PR118497
|
||||
Patch8: fix_cgo_panic-with-gcc15-in-368.patch
|
||||
Patch8: fix_cgo_panic-with-gcc15-in-368.patch
|
||||
|
||||
# Having documentation separate was broken
|
||||
Obsoletes: %{name}-docs < 1.1-4
|
||||
|
|
|
|||
2
sources
2
sources
|
|
@ -1 +1 @@
|
|||
SHA512 (go1.24rc2.src.tar.gz) = 767c5c030a3fd84be7c449d431148df5da5fb5cf3d19886e238ea1c535a36f25b3a3433dfc690ef0dac2fc4e9fc9f899bc748494bc1339710267ba02de178676
|
||||
SHA512 (go1.24.11.src.tar.gz) = 9344039d231e50b63f52acbdd6cf2f483a4052d95b5fcc3e8a6d8fde80f0195f66ac5588302809ff0425de4d7c6b428ae842ec33b468c7020873acedbdea16ef
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue