runtime: leave cleantimers early if G is being preempted
runtime: leave cleantimers early if G is being preempted

The cleantimers can run for a while in some unlikely cases.
If the GC is trying to preempt the G, it is forced to wait as the
G is holding timersLock. To avoid introducing a GC delay,
return from cleantimers if the G has a preemption request.

Fixes #37779

Change-Id: Id9a567f991e26668e2292eefc39e2edc56efa4e0
Reviewed-on: https://go-review.googlesource.com/c/go/+/223122
Run-TryBot: Ian Lance Taylor <87e9c6d529889242b7e184afb632328636553ab4@golang.org>
TryBot-Result: Gobot Gobot <66cb808b70d30c07676d5e946fee83fd561249e5@golang.org>
Reviewed-by: Michael Knyszek <4473450dc5c88f06e1fb787f303d7805ec2aee65@google.com>
Reviewed-by: Cherry Zhang <d62e63aa42ce272d7b6a5055d97e942b33a34679@google.com>

golang/go,akutz/go,nawawi/go,golang/go,CAFxX/go,akutz/go,golang/go,CAFxX/go,golang/go,golang/go,golang/go,cloudflare/go,akutz/go,nawawi/go,CAFxX/go,cloudflare/go,akutz/go,nawawi/go,golang/go,nawawi/go,cloudflare/go,nawawi/go,cloudflare/go,CAFxX/go,cloudflare/go,akutz/go,cloudflare/go,cloudflare/go,nawawi/go,CAFxX/go,CAFxX/go,akutz/go,nawawi/go,CAFxX/go,akutz/go,nawawi/go,akutz/go,cloudflare/go,golang/go,CAFxX/go