workaround to random timeouts

This commit is contained in:
Arceliar 2019-04-26 22:42:05 -05:00
parent 5d323861f0
commit 6469e39ff1
2 changed files with 6 additions and 7 deletions

View File

@ -48,13 +48,12 @@ func PutBytes(bs []byte) {
// This is a workaround to go's broken timer implementation
func TimerStop(t *time.Timer) bool {
if !t.Stop() {
select {
case <-t.C:
default:
}
stopped := t.Stop()
select {
case <-t.C:
default:
}
return true
return stopped
}
// Run a blocking function with a timeout.

View File

@ -144,7 +144,7 @@ func (c *Conn) startSearch() {
}
func getDeadlineTimer(value *atomic.Value) *time.Timer {
timer := time.NewTimer(0)
timer := time.NewTimer(24 * 365 * time.Hour) // FIXME for some reason setting this to 0 doesn't always let it stop and drain the channel correctly
util.TimerStop(timer)
if deadline, ok := value.Load().(time.Time); ok {
timer.Reset(time.Until(deadline))