Skip to content

Commit aac09d4

Browse files
kscovipwzw
ksco
authored andcommitted
fix(chain): add ticker stop method
stop the ticker to release associated resources.
1 parent 29e0245 commit aac09d4

File tree

10 files changed

+32
-5
lines changed

10 files changed

+32
-5
lines changed

blockchain/blocksyn.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -131,14 +131,15 @@ func (chain *BlockChain) OnChainTimeout(height int64) bool {
131131
func (chain *BlockChain) SynRoutine() {
132132
//获取peerlist的定时器,默认1分钟
133133
fetchPeerListTicker := time.NewTicker(time.Duration(fetchPeerListSeconds) * time.Second)
134+
defer fetchPeerListTicker.Stop()
134135

135136
//向peer请求同步block的定时器,默认2s
136137
blockSynTicker := time.NewTicker(chain.blockSynInterVal * time.Second)
137-
138+
defer blockSynTicker.Stop()
138139
//5分钟检测一次bestchain主链高度是否有增长,如果没有增长可能是目前主链在侧链上,
139140
//需要从最高peer向后同步指定的headers用来获取分叉点,再后从指定peer获取分叉点以后的blocks
140141
checkHeightNoIncreaseTicker := time.NewTicker(time.Duration(checkHeightNoIncSeconds) * time.Second)
141-
142+
defer checkHeightNoIncreaseTicker.Stop()
142143
//目前暂定1分钟检测一次本bestchain的tiphash和最高peer的对应高度的blockshash是否一致。
143144
//如果不一致可能两个节点在各自的链上挖矿,需要从peer的对应高度向后获取指定数量的headers寻找分叉点
144145
//考虑叉后的第一个block没有广播到本节点,导致接下来广播过来的blocks都是孤儿节点,无法进行主侧链总难度对比
@@ -152,13 +153,13 @@ func (chain *BlockChain) SynRoutine() {
152153
}
153154
//3分钟尝试检测一次故障peer是否已经恢复
154155
recoveryFaultPeerTicker := time.NewTicker(180 * time.Second)
155-
156+
defer recoveryFaultPeerTicker.Stop()
156157
//2分钟尝试检测一次最优链,确保本节点在最优链
157158
checkBestChainTicker := time.NewTicker(120 * time.Second)
158-
159+
defer checkBestChainTicker.Stop()
159160
//30s尝试从peer节点请求ChunkRecord
160161
chunkRecordSynTicker := time.NewTicker(30 * time.Second)
161-
162+
defer chunkRecordSynTicker.Stop()
162163
//节点下载模式
163164
go chain.DownLoadBlocks()
164165

blockchain/chain.go

+1
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,7 @@ func (chain *BlockChain) InitIndexAndBestView() {
582582
func (chain *BlockChain) UpdateRoutine() {
583583
//1秒尝试检测一次futureblock,futureblock的time小于当前系统时间就广播此block
584584
futureblockTicker := time.NewTicker(1 * time.Second)
585+
defer futureblockTicker.Stop()
585586

586587
for {
587588
select {

blockchain/chunkshard.go

+4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ func (chain *BlockChain) chunkDeleteRoutine() {
3535
defer chain.tickerwg.Done()
3636
// 60s检测一次是否可以删除本地的body数据
3737
checkDelTicker := time.NewTicker(time.Minute)
38+
defer checkDelTicker.Stop()
39+
3840
for {
3941
select {
4042
case <-chain.quit:
@@ -49,6 +51,8 @@ func (chain *BlockChain) chunkGenerateRoutine() {
4951
defer chain.tickerwg.Done()
5052
// 10s检测一次是否可以触发归档操作
5153
checkGenChunkTicker := time.NewTicker(10 * time.Second)
54+
defer checkGenChunkTicker.Stop()
55+
5256
for {
5357
select {
5458
case <-chain.quit:

blockchain/reduce.go

+2
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ func (chain *BlockChain) ReduceLocalDB() {
160160
}
161161
// 10s检测一次是否可以进行reduce localdb
162162
checkTicker := time.NewTicker(10 * time.Second)
163+
defer checkTicker.Stop()
164+
163165
for {
164166
select {
165167
case <-chain.quit:

cmd/miner_accounts/accounts/block.go

+2
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ func SyncBlock(host string) {
144144
syncHeaders(host)
145145

146146
timeout := time.NewTicker(time.Minute)
147+
defer timeout.Stop()
148+
147149
for {
148150
<-timeout.C
149151
syncHeaders(host)

system/p2p/dht/manage/connectionGater.go

+2
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,8 @@ func (tc *TimeCache) Add(s string, lifetime time.Duration) {
194194

195195
func (tc *TimeCache) sweep() {
196196
ticker := time.NewTicker(time.Second)
197+
defer ticker.Stop()
198+
197199
for {
198200
select {
199201
case <-ticker.C:

system/p2p/dht/manage/conns.go

+3
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,10 @@ func (s *ConnManager) BandTrackerByProtocol() *types.NetProtocolInfos {
101101
// MonitorAllPeers monitory all peers
102102
func (s *ConnManager) MonitorAllPeers() {
103103
ticker1 := time.NewTicker(time.Minute)
104+
defer ticker1.Stop()
104105
ticker2 := time.NewTicker(time.Minute * 2)
106+
defer ticker2.Stop()
107+
105108
for {
106109
select {
107110
case <-s.ctx.Done():

system/p2p/dht/protocol/p2pstore/p2pstore.go

+5
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,11 @@ func InitProtocol(env *protocol.P2PEnv) {
109109
go p.syncRoutine()
110110
go func() {
111111
ticker1 := time.NewTicker(time.Minute)
112+
defer ticker1.Stop()
112113
ticker2 := time.NewTicker(types2.RefreshInterval)
114+
defer ticker2.Stop()
113115
ticker4 := time.NewTicker(time.Hour)
116+
defer ticker4.Stop()
114117

115118
for {
116119
select {
@@ -246,6 +249,8 @@ func (p *Protocol) updateShardHealthyRoutingTableRoutine() {
246249
time.Sleep(time.Second)
247250
}
248251
ticker := time.NewTicker(time.Minute * 5)
252+
defer ticker.Stop()
253+
249254
for {
250255
select {
251256
case <-p.Ctx.Done():

system/p2p/dht/protocol/peer/peer.go

+5
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,10 @@ func InitProtocol(env *protocol.P2PEnv) {
8787
go p.detectNodeAddr()
8888
go func() {
8989
ticker := time.NewTicker(time.Second / 2)
90+
defer ticker.Stop()
9091
ticker2 := time.NewTicker(time.Minute * 5)
92+
defer ticker2.Stop()
93+
9194
for {
9295
select {
9396
case <-p.Ctx.Done():
@@ -104,6 +107,8 @@ func InitProtocol(env *protocol.P2PEnv) {
104107
if p.ChainCfg.IsTestNet() {
105108
ticker1 = time.NewTicker(time.Second)
106109
}
110+
defer ticker1.Stop()
111+
107112
for {
108113
select {
109114
case <-p.Ctx.Done():

util/cli/chain33.go

+2
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,8 @@ func fixtimeRoutine(hosts []string) {
280280
}
281281
//时间请求频繁一点:
282282
ticket := time.NewTicker(time.Minute * 1)
283+
defer ticket.Stop()
284+
283285
for range ticket.C {
284286
t = common.GetRealTimeRetry(hosts, 10)
285287
if !t.IsZero() {

0 commit comments

Comments
 (0)