diff options
| author | Michael Pratt <mpratt@google.com> | 2025-10-06 16:38:29 -0400 |
|---|---|---|
| committer | Michael Pratt <mpratt@google.com> | 2025-10-07 07:33:32 -0700 |
| commit | 64699542031b994ec4fdb6de887a94b69a372f9b (patch) | |
| tree | 7ebf6de6e389b7ab9f401aa8a1fa31257869a241 /src/runtime | |
| parent | 4c0fd3a2b45675a581ef6fa273a221d7131b5647 (diff) | |
| download | go-64699542031b994ec4fdb6de887a94b69a372f9b.tar.xz | |
runtime: assert p.destroy runs with GC not running
This is already guaranteed by stopTheWorldGC prior to procresize. Thus
the cleanup code here is dead, which is a bit confusing.
Replace it with a throw for clarity.
Change-Id: I6a6a636c8ca1487b720c4fab41b2b86c13d1d9e0
Reviewed-on: https://go-review.googlesource.com/c/go/+/709655
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/runtime')
| -rw-r--r-- | src/runtime/proc.go | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/runtime/proc.go b/src/runtime/proc.go index e568670529..d36895b046 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -5818,11 +5818,13 @@ func (pp *p) destroy() { // Move all timers to the local P. getg().m.p.ptr().timers.take(&pp.timers) - // Flush p's write barrier buffer. - if gcphase != _GCoff { - wbBufFlush1(pp) - pp.gcw.dispose() + // No need to flush p's write barrier buffer or span queue, as Ps + // cannot be destroyed during the mark phase. + if phase := gcphase; phase != _GCoff { + println("runtime: p id", pp.id, "destroyed during GC phase", phase) + throw("P destroyed while GC is running") } + clear(pp.sudogbuf[:]) pp.sudogcache = pp.sudogbuf[:0] pp.pinnerCache = nil |
