time.After -> ticker
diff --git a/session.go b/session.go index cf63342..d64805e 100644 --- a/session.go +++ b/session.go
@@ -24,6 +24,7 @@ "io" "net" "runtime" + "runtime/debug" "sync" "time" ) @@ -543,18 +544,20 @@ } go func() { + ticker := time.NewTicker(s.period) defer func() { + ticker.Stop() if r := recover(); r != nil { - log.Errorf("Heartbeat panic occurs, error is %s", r) + log.Errorf("Heartbeat panic occurs, error is %s, stack %v", r, string(debug.Stack())) } }() for { select { case <-s.done: // s.done is a blocked channel. if it has not been closed, the default branch will be invoked. return - case <-time.After(s.period): + case <-ticker.C: if err := heartbeat(s); err != nil { - log.Errorf("Heartbeat with error: %s", err) + log.Errorf("sessioin %s, heartbeat with error: %s", s.sessionToken(), err) } } }