X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/8528ba00c107167599a5cadddc4782a7d6fc2251..refs/heads/20930-websocket:/services/ws/event_source.go diff --git a/services/ws/event_source.go b/services/ws/event_source.go index 2f4838397a..e0269701c9 100644 --- a/services/ws/event_source.go +++ b/services/ws/event_source.go @@ -253,25 +253,36 @@ func (ps *pgEventSource) Run() { }() var serial uint64 - ticker := time.NewTicker(listenerPingInterval) - defer ticker.Stop() + + go func() { + ticker := time.NewTicker(listenerPingInterval) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + ps.Logger.Debug("ctx done") + return + + case <-ticker.C: + ps.Logger.Debug("listener ping") + if testSlowPing { + time.Sleep(time.Second / 2) + } + err := ps.pqListener.Ping() + if err != nil { + ps.listenerProblem(-1, fmt.Errorf("pqListener ping failed: %s", err)) + continue + } + } + } + }() + for { select { case <-ctx.Done(): ps.Logger.Debug("ctx done") return - case <-ticker.C: - ps.Logger.Debug("listener ping") - if testSlowPing { - time.Sleep(time.Second / 2) - } - err := ps.pqListener.Ping() - if err != nil { - ps.listenerProblem(-1, fmt.Errorf("pqListener ping failed: %s", err)) - continue - } - case pqEvent, ok := <-ps.pqListener.Notify: if !ok { ps.Logger.Error("pqListener Notify chan closed")