aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/mgc.go
diff options
context:
space:
mode:
authorAndy Pan <panjf2000@gmail.com>2021-04-23 21:25:06 +0800
committerMichael Pratt <mpratt@google.com>2021-05-05 15:53:20 +0000
commit3b304ce7fe35b9d1e8cf0b0518ed2550c361a010 (patch)
treead92c193eb9dd4778e57ebb22c98267be875ce23 /src/runtime/mgc.go
parentf34fe8e370f8bd910640fa49bb4d93e910145193 (diff)
downloadgo-3b304ce7fe35b9d1e8cf0b0518ed2550c361a010.tar.gz
go-3b304ce7fe35b9d1e8cf0b0518ed2550c361a010.zip
runtime: implement runqdrain() for GC mark worker goroutines
Revive CL 310149 Change-Id: Ib4714ea5b2ade32c0f66edff841a79d8212bd79a Reviewed-on: https://go-review.googlesource.com/c/go/+/313009 Run-TryBot: Ian Lance Taylor <iant@golang.org> Run-TryBot: Michael Pratt <mpratt@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Michael Pratt <mpratt@google.com> Trust: Michael Pratt <mpratt@google.com> Trust: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/runtime/mgc.go')
-rw-r--r--src/runtime/mgc.go12
1 files changed, 4 insertions, 8 deletions
diff --git a/src/runtime/mgc.go b/src/runtime/mgc.go
index 601593087d..4585663535 100644
--- a/src/runtime/mgc.go
+++ b/src/runtime/mgc.go
@@ -1273,15 +1273,11 @@ func gcBgMarkWorker() {
// everything out of the run
// queue so it can run
// somewhere else.
- lock(&sched.lock)
- for {
- gp, _ := runqget(pp)
- if gp == nil {
- break
- }
- globrunqput(gp)
+ if drainQ, n := runqdrain(pp); n > 0 {
+ lock(&sched.lock)
+ globrunqputbatch(&drainQ, int32(n))
+ unlock(&sched.lock)
}
- unlock(&sched.lock)
}
// Go back to draining, this time
// without preemption.