diff --git a/ethstats/ethstats.go b/ethstats/ethstats.go index defca45c8..6e1aad693 100644 --- a/ethstats/ethstats.go +++ b/ethstats/ethstats.go @@ -154,7 +154,7 @@ func (s *Service) loop() { txSub := txpool.SubscribeNewTxsEvent(txEventCh) defer txSub.Unsubscribe() - // Start a goroutine that exhausts the subsciptions to avoid events piling up + // Start a goroutine that exhausts the subscriptions to avoid events piling up var ( quitCh = make(chan struct{}) headCh = make(chan *types.Block, 1) @@ -194,16 +194,17 @@ func (s *Service) loop() { } close(quitCh) }() + + // Resolve the URL, defaulting to TLS, but falling back to none too + path := fmt.Sprintf("%s/api", s.host) + urls := []string{path} + + // url.Parse and url.IsAbs is unsuitable (https://github.com/golang/go/issues/19779) + if !strings.Contains(path, "://") { + urls = []string{"wss://" + path, "ws://" + path} + } // Loop reporting until termination for { - // Resolve the URL, defaulting to TLS, but falling back to none too - path := fmt.Sprintf("%s/api", s.host) - urls := []string{path} - - // url.Parse and url.IsAbs is unsuitable (https://github.com/golang/go/issues/19779) - if !strings.Contains(path, "://") { - urls = []string{"wss://" + path, "ws://" + path} - } // Establish a websocket connection to the server on any supported URL var ( conn *websocket.Conn @@ -240,11 +241,12 @@ func (s *Service) loop() { } // Keep sending status updates until the connection breaks fullReport := time.NewTicker(15 * time.Second) - defer fullReport.Stop() for err == nil { select { case <-quitCh: + fullReport.Stop() + // Make sure the connection is closed conn.Close() return @@ -269,6 +271,7 @@ func (s *Service) loop() { } } } + fullReport.Stop() // Make sure the connection is closed conn.Close() }