Skip to content

Commit

Permalink
runtime: clear isSending bit earlier
Browse files Browse the repository at this point in the history
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

Change-Id: I8b5f167f162bbcbcbf7ea47305967f349b62b0f4
Reviewed-on: https://go-review.googlesource.com/c/go/+/617497
Reviewed-by: Ian Lance Taylor <[email protected]>
Reviewed-by: Michael Knyszek <[email protected]>
Commit-Queue: Ian Lance Taylor <[email protected]>
LUCI-TryBot-Result: Go LUCI <[email protected]>
Auto-Submit: Ian Lance Taylor <[email protected]>
  • Loading branch information
ianlancetaylor authored and gopherbot committed Oct 2, 2024
1 parent 9593684 commit ce60f70
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions src/runtime/time.go
Original file line number Diff line number Diff line change
Expand Up @@ -1114,6 +1114,11 @@ func (t *timer) unlockAndRun(now int64) {
// started to send the value. That lets them correctly return
// true meaning that no value was sent.
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 {
f = func(any, uintptr, int64) {}
}
Expand All @@ -1122,9 +1127,6 @@ func (t *timer) unlockAndRun(now int64) {
f(arg, seq, delay)

if !async && t.isChan {
// We are no longer sending a value.
t.isSending.And(^isSendingClear)

unlock(&t.sendLock)
}

Expand Down

0 comments on commit ce60f70

Please sign in to comment.