for {
select {
case <-ctx.Done():
- if old := chanw.Load(); old < 0 {
+ if old := chanw.Load(); old == -1 {
return
} else if now := time.Now(); old > 0 && now.Unix()-old > int64(to.Seconds()) {
if old != 0 {
}
} else {
time.AfterFunc(to, func() {
- if old, now := chanw.Load(), time.Now(); old != 0 && now.Unix()-old > int64(to.Seconds()) {
+ if old := chanw.Load(); old == -1 {
+ return
+ } else if now := time.Now(); old > 0 && now.Unix()-old > int64(to.Seconds()) {
panicf[0](fmt.Sprintf("write blocking after close %vs > %v, goruntime leak \n%v", now.Unix()-old, to, callTree))
}
})
}
return
case now := <-timer.C:
- if old := chanw.Load(); old < 0 {
+ if old := chanw.Load(); old == -1 {
return
} else if old > 0 && now.Unix()-old > int64(to.Seconds()) {
panicf[0](fmt.Sprintf("write blocking after rw %vs > %v, goruntime leak \n%v", now.Unix()-old, to, callTree))