diff options
Diffstat (limited to 'src/runtime/time.go')
| -rw-r--r-- | src/runtime/time.go | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/runtime/time.go b/src/runtime/time.go index fea5d6871c..6c1170bbc0 100644 --- a/src/runtime/time.go +++ b/src/runtime/time.go @@ -14,7 +14,7 @@ import ( ) // Temporary scaffolding while the new timer code is added. -const oldTimers = true +const oldTimers = false // Package time knows the layout of this structure. // If this struct changes, adjust ../time/sleep.go:/runtimeTimer. @@ -989,10 +989,12 @@ func addAdjustedTimers(pp *p, moved []*timer) { case timerDeleted: // Timer has been deleted since we adjusted it. // This timer is already out of the heap. - if !atomic.Cas(&t.status, s, timerRemoved) { - badTimer() + if atomic.Cas(&t.status, s, timerRemoving) { + if !atomic.Cas(&t.status, timerRemoving, timerRemoved) { + badTimer() + } + break loop } - break loop case timerModifiedEarlier, timerModifiedLater: // Timer has been modified again since // we adjusted it. @@ -1007,8 +1009,8 @@ func addAdjustedTimers(pp *p, moved []*timer) { if s == timerModifiedEarlier { atomic.Xadd(&pp.adjustTimers, -1) } + break loop } - break loop case timerNoStatus, timerRunning, timerRemoving, timerRemoved, timerMoving: badTimer() case timerModifying: |
