mirror of
https://github.com/golang/go
synced 2024-11-12 09:50:21 -07:00
time: panic with a more helpful error on use of invalid Timer
Fixes #8721 LGTM=rsc R=r, rsc CC=golang-codereviews https://golang.org/cl/155620045
This commit is contained in:
parent
93fcb92257
commit
ab4af52a9b
@ -55,6 +55,9 @@ type Timer struct {
|
||||
// Stop does not close the channel, to prevent a read from the channel succeeding
|
||||
// incorrectly.
|
||||
func (t *Timer) Stop() bool {
|
||||
if t.r.f == nil {
|
||||
panic("time: Stop called on uninitialized Timer")
|
||||
}
|
||||
return stopTimer(&t.r)
|
||||
}
|
||||
|
||||
@ -78,6 +81,9 @@ func NewTimer(d Duration) *Timer {
|
||||
// It returns true if the timer had been active, false if the timer had
|
||||
// expired or been stopped.
|
||||
func (t *Timer) Reset(d Duration) bool {
|
||||
if t.r.f == nil {
|
||||
panic("time: Reset called on uninitialized Timer")
|
||||
}
|
||||
w := when(d)
|
||||
active := stopTimer(&t.r)
|
||||
t.r.when = w
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
"fmt"
|
||||
"runtime"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"testing"
|
||||
@ -407,3 +408,23 @@ func TestOverflowRuntimeTimer(t *testing.T) {
|
||||
// the end of CheckRuntimeTimerOverflow in internal_test.go.
|
||||
CheckRuntimeTimerOverflow()
|
||||
}
|
||||
|
||||
func checkZeroPanicString(t *testing.T) {
|
||||
e := recover()
|
||||
s, _ := e.(string)
|
||||
if want := "called on uninitialized Timer"; !strings.Contains(s, want) {
|
||||
t.Errorf("panic = %v; want substring %q", e, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestZeroTimerResetPanics(t *testing.T) {
|
||||
defer checkZeroPanicString(t)
|
||||
var tr Timer
|
||||
tr.Reset(1)
|
||||
}
|
||||
|
||||
func TestZeroTimerStopPanics(t *testing.T) {
|
||||
defer checkZeroPanicString(t)
|
||||
var tr Timer
|
||||
tr.Stop()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user