OSDN Git Service

Fix timer not stoped bug (#1653)
authoryahtoo <yahtoo.ma@gmail.com>
Tue, 26 Mar 2019 06:22:33 +0000 (14:22 +0800)
committerPaladz <yzhu101@uottawa.ca>
Tue, 26 Mar 2019 06:22:33 +0000 (14:22 +0800)
account/utxo_keeper.go
netsync/block_keeper.go
netsync/protocol_reactor.go
p2p/connection/connection.go
p2p/discover/net.go
protocol/txpool.go

index 9fa62ea..727a354 100644 (file)
@@ -184,10 +184,13 @@ func (uk *utxoKeeper) cancel(rid uint64) {
 
 func (uk *utxoKeeper) expireWorker() {
        ticker := time.NewTicker(1000 * time.Millisecond)
+       defer ticker.Stop()
+
        for now := range ticker.C {
                uk.expireReservation(now)
        }
 }
+
 func (uk *utxoKeeper) expireReservation(t time.Time) {
        uk.mtx.Lock()
        defer uk.mtx.Unlock()
index bf30b2a..6f4bfee 100644 (file)
@@ -289,7 +289,9 @@ func (bk *blockKeeper) requireBlock(height uint64) (*types.Block, error) {
                return nil, errPeerDropped
        }
 
-       waitTicker := time.NewTimer(syncTimeout)
+       timeout := time.NewTimer(syncTimeout)
+       defer timeout.Stop()
+
        for {
                select {
                case msg := <-bk.blockProcessCh:
@@ -300,7 +302,7 @@ func (bk *blockKeeper) requireBlock(height uint64) (*types.Block, error) {
                                continue
                        }
                        return msg.block, nil
-               case <-waitTicker.C:
+               case <-timeout.C:
                        return nil, errors.Wrap(errRequestTimeout, "requireBlock")
                }
        }
@@ -311,7 +313,9 @@ func (bk *blockKeeper) requireBlocks(locator []*bc.Hash, stopHash *bc.Hash) ([]*
                return nil, errPeerDropped
        }
 
-       waitTicker := time.NewTimer(syncTimeout)
+       timeout := time.NewTimer(syncTimeout)
+       defer timeout.Stop()
+
        for {
                select {
                case msg := <-bk.blocksProcessCh:
@@ -319,7 +323,7 @@ func (bk *blockKeeper) requireBlocks(locator []*bc.Hash, stopHash *bc.Hash) ([]*
                                continue
                        }
                        return msg.blocks, nil
-               case <-waitTicker.C:
+               case <-timeout.C:
                        return nil, errors.Wrap(errRequestTimeout, "requireBlocks")
                }
        }
@@ -330,7 +334,9 @@ func (bk *blockKeeper) requireHeaders(locator []*bc.Hash, stopHash *bc.Hash) ([]
                return nil, errPeerDropped
        }
 
-       waitTicker := time.NewTimer(syncTimeout)
+       timeout := time.NewTimer(syncTimeout)
+       defer timeout.Stop()
+
        for {
                select {
                case msg := <-bk.headersProcessCh:
@@ -338,7 +344,7 @@ func (bk *blockKeeper) requireHeaders(locator []*bc.Hash, stopHash *bc.Hash) ([]
                                continue
                        }
                        return msg.headers, nil
-               case <-waitTicker.C:
+               case <-timeout.C:
                        return nil, errors.Wrap(errRequestTimeout, "requireHeaders")
                }
        }
@@ -393,6 +399,8 @@ func (bk *blockKeeper) syncWorker() {
                return
        }
        syncTicker := time.NewTicker(syncCycle)
+       defer syncTicker.Stop()
+
        for {
                <-syncTicker.C
                if update := bk.startSync(); !update {
index 4500f87..06d68d0 100644 (file)
@@ -41,7 +41,7 @@ func NewProtocolReactor(sm *SyncManager, peers *peerSet) *ProtocolReactor {
 // GetChannels implements Reactor
 func (pr *ProtocolReactor) GetChannels() []*connection.ChannelDescriptor {
        return []*connection.ChannelDescriptor{
-               &connection.ChannelDescriptor{
+               {
                        ID:                BlockchainChannel,
                        Priority:          5,
                        SendQueueCapacity: 100,
@@ -66,8 +66,10 @@ func (pr *ProtocolReactor) AddPeer(peer *p2p.Peer) error {
                return errStatusRequest
        }
 
-       checkTicker := time.NewTimer(handshakeCheckPerid)
-       timeoutTicker := time.NewTimer(handshakeTimeout)
+       checkTicker := time.NewTicker(handshakeCheckPerid)
+       defer checkTicker.Stop()
+       timeout := time.NewTimer(handshakeTimeout)
+       defer timeout.Stop()
        for {
                select {
                case <-checkTicker.C:
@@ -76,7 +78,7 @@ func (pr *ProtocolReactor) AddPeer(peer *p2p.Peer) error {
                                return nil
                        }
 
-               case <-timeoutTicker.C:
+               case <-timeout.C:
                        return errProtocolHandshakeTimeout
                }
        }
index 5a45ada..30c900f 100644 (file)
@@ -154,6 +154,8 @@ func (c *MConnection) OnStart() error {
 func (c *MConnection) OnStop() {
        c.BaseService.OnStop()
        c.flushTimer.Stop()
+       c.pingTimer.Stop()
+       c.chStatsTimer.Stop()
        if c.quit != nil {
                close(c.quit)
        }
index ef067fc..7666913 100644 (file)
@@ -365,6 +365,8 @@ func (net *Network) loop() {
                if nextRegisterTimer != nil {
                        nextRegisterTimer.Stop()
                }
+               refreshTimer.Stop()
+               bucketRefreshTimer.Stop()
        }()
        resetNextTicket := func() {
                ticket, timeout := net.ticketStore.nextFilteredTicket()
@@ -395,6 +397,7 @@ func (net *Network) loop() {
        <-topicRegisterLookupTick.C
 
        statsDump := time.NewTicker(10 * time.Second)
+       defer statsDump.Stop()
 
 loop:
        for {
index 10fbbc5..8578028 100644 (file)
@@ -300,6 +300,8 @@ func (tp *TxPool) checkOrphanUtxos(tx *types.Tx) ([]*bc.Hash, error) {
 
 func (tp *TxPool) orphanExpireWorker() {
        ticker := time.NewTicker(orphanExpireScanInterval)
+       defer ticker.Stop()
+
        for now := range ticker.C {
                tp.ExpireOrphan(now)
        }