mirror of
https://github.com/golang/go.git
synced 2025-05-24 17:01:26 +00:00
runtime: handle timers on P's in procresize/(*pp).destroy
Updates #6239 Updates #27707 Change-Id: I52cab8bf3dc8c552463725fc1d9e4e6b12230b03 Reviewed-on: https://go-review.googlesource.com/c/go/+/171828 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Michael Knyszek <mknyszek@google.com>
This commit is contained in:
parent
9989221ac1
commit
6b3bb4ba3b
@ -4117,6 +4117,12 @@ func (pp *p) destroy() {
|
||||
globrunqputhead(pp.runnext.ptr())
|
||||
pp.runnext = 0
|
||||
}
|
||||
if len(pp.timers) > 0 {
|
||||
plocal := getg().m.p.ptr()
|
||||
// The world is stopped so we don't need to hold timersLock.
|
||||
moveTimers(plocal, pp.timers)
|
||||
pp.timers = nil
|
||||
}
|
||||
// If there's a background worker, make it runnable and put
|
||||
// it on the global queue so it can clean itself up.
|
||||
if gp := pp.gcBgMarkWorker.ptr(); gp != nil {
|
||||
|
@ -325,6 +325,14 @@ func timerproc(tb *timersBucket) {
|
||||
}
|
||||
}
|
||||
|
||||
// moveTimers moves a slice of timers to pp. The slice has been taken
|
||||
// from a different P.
|
||||
// This is currently called when the world is stopped, but it could
|
||||
// work as long as the timers for pp are locked.
|
||||
func moveTimers(pp *p, timers []*timer) {
|
||||
throw("movetimers: not yet implemented")
|
||||
}
|
||||
|
||||
// adjusttimers looks through the timers in the current P's heap for
|
||||
// any timers that have been modified to run earlier, and puts them in
|
||||
// the correct place in the heap.
|
||||
|
Loading…
x
Reference in New Issue
Block a user