OSDN Git Service

add locks for conn
authorHAOYUatHZ <haoyu@protonmail.com>
Tue, 27 Aug 2019 07:45:43 +0000 (15:45 +0800)
committerHAOYUatHZ <haoyu@protonmail.com>
Tue, 27 Aug 2019 07:45:43 +0000 (15:45 +0800)
toolbar/precog/monitor/connection.go
toolbar/precog/monitor/discover.go
toolbar/precog/monitor/monitor.go

index ef9cd0e..ed6df81 100644 (file)
@@ -13,6 +13,7 @@ func (m *monitor) connectNodesRoutine() {
        ticker := time.NewTicker(time.Duration(m.cfg.CheckFreqSeconds) * time.Second)
        for ; true; <-ticker.C {
                <-m.dialCh
+               m.Lock()
                if err := m.dialNodes(); err != nil {
                        log.Error(err)
                }
index 002cba0..72c1e00 100644 (file)
@@ -24,8 +24,9 @@ func (m *monitor) discoveryRoutine(discvWg *sync.WaitGroup) {
                m.Lock()
                for i := 0; i < n; i++ {
                        m.discvCh <- nodes[i]
-                       // wg.Add(1)
+                       discvWg.Add(1)
                }
+               discvWg.Wait()
                m.Unlock()
        }
 }
@@ -48,5 +49,7 @@ func (m *monitor) collectDiscoveredNodes(discvWg *sync.WaitGroup) {
                } else {
                        log.Error(err)
                }
+
+               discvWg.Done()
        }
 }
index 3dc14a3..96e40db 100644 (file)
@@ -216,6 +216,7 @@ func (m *monitor) checkStatusRoutine() {
                        peers.RemovePeer(p.ID())
                }
                log.Info("Disonnect all peers.")
+               m.Unlock()
                m.dialCh <- struct{}{}
        }
 }