mirror of
https://github.com/golang/go.git
synced 2025-05-05 23:53:05 +00:00
[release-branch.go1.23] runtime: clear isSending bit earlier
I've done some more testing of the new isSending field. I'm not able to get more than 2 bits set. That said, with this change it's significantly less likely to have even 2 bits set. The idea here is to clear the bit before possibly locking the channel we are sending the value on, thus avoiding some delay and some serialization. For #69312 For #69333 Change-Id: I8b5f167f162bbcbcbf7ea47305967f349b62b0f4 Reviewed-on: https://go-review.googlesource.com/c/go/+/617596 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Commit-Queue: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com>
This commit is contained in:
parent
9563300f6e
commit
cc16cdf48f
@ -1114,6 +1114,11 @@ func (t *timer) unlockAndRun(now int64) {
|
|||||||
// started to send the value. That lets them correctly return
|
// started to send the value. That lets them correctly return
|
||||||
// true meaning that no value was sent.
|
// true meaning that no value was sent.
|
||||||
lock(&t.sendLock)
|
lock(&t.sendLock)
|
||||||
|
|
||||||
|
// We are committed to possibly sending a value based on seq,
|
||||||
|
// so no need to keep telling stop/modify that we are sending.
|
||||||
|
t.isSending.And(^isSendingClear)
|
||||||
|
|
||||||
if t.seq != seq {
|
if t.seq != seq {
|
||||||
f = func(any, uintptr, int64) {}
|
f = func(any, uintptr, int64) {}
|
||||||
}
|
}
|
||||||
@ -1122,9 +1127,6 @@ func (t *timer) unlockAndRun(now int64) {
|
|||||||
f(arg, seq, delay)
|
f(arg, seq, delay)
|
||||||
|
|
||||||
if !async && t.isChan {
|
if !async && t.isChan {
|
||||||
// We are no longer sending a value.
|
|
||||||
t.isSending.And(^isSendingClear)
|
|
||||||
|
|
||||||
unlock(&t.sendLock)
|
unlock(&t.sendLock)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user