mirror of https://github.com/golang/go.git
The timerpMask optimization updates a mask of Ps (potentially) containing timers in pidleget / pidleput. For correctness, it depends on the assumption that new timers can only be added to a P's own heap. addtimer violates this assumption if it is preempted after computing pp. That G may then run on a different P, but adding a timer to the original P's heap. Avoid this by disabling preemption while pp is in use. Other uses of doaddtimer should be OK: * moveTimers: always moves to the current P's heap * modtimer, cleantimers, addAdjustedTimers, runtimer: does not add net new timers to the heap while locked For #44868 Fixes #45731 Change-Id: I4a5d080865e854931d0a3a09a51ca36879101d72 Reviewed-on: https://go-review.googlesource.com/c/go/+/300610 Trust: Michael Pratt <mpratt@google.com> Run-TryBot: Michael Pratt <mpratt@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-on: https://go-review.googlesource.com/c/go/+/313129 Trust: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Michael Pratt <mpratt@google.com> |
||
|---|---|---|
| .. | ||
| tzdata | ||
| embed.go | ||
| example_test.go | ||
| export_android_test.go | ||
| export_test.go | ||
| export_windows_test.go | ||
| format.go | ||
| format_test.go | ||
| genzabbrs.go | ||
| internal_test.go | ||
| mono_test.go | ||
| sleep.go | ||
| sleep_test.go | ||
| sys_plan9.go | ||
| sys_unix.go | ||
| sys_windows.go | ||
| tick.go | ||
| tick_test.go | ||
| time.go | ||
| time_test.go | ||
| tzdata_test.go | ||
| zoneinfo.go | ||
| zoneinfo_abbrs_windows.go | ||
| zoneinfo_android.go | ||
| zoneinfo_android_test.go | ||
| zoneinfo_ios.go | ||
| zoneinfo_js.go | ||
| zoneinfo_plan9.go | ||
| zoneinfo_read.go | ||
| zoneinfo_test.go | ||
| zoneinfo_unix.go | ||
| zoneinfo_windows.go | ||
| zoneinfo_windows_test.go | ||