Skip to content

Commit f3c55dc

Browse files
committed
les: fix goroutine leaks in test execution
1 parent cc33398 commit f3c55dc

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

les/server.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,17 +212,25 @@ func (s *LesServer) Stop() error {
212212
close(s.closeCh)
213213

214214
s.clientPool.Stop()
215-
s.serverset.close()
215+
if s.serverset != nil {
216+
s.serverset.close()
217+
}
216218
s.peers.close()
217219
s.fcManager.Stop()
218220
s.costTracker.stop()
219221
s.handler.stop()
220222
s.servingQueue.stop()
221-
s.vfluxServer.Stop()
223+
if s.vfluxServer != nil {
224+
s.vfluxServer.Stop()
225+
}
222226

223227
// Note, bloom trie indexer is closed by parent bloombits indexer.
224-
s.chtIndexer.Close()
225-
s.lesDb.Close()
228+
if s.chtIndexer != nil {
229+
s.chtIndexer.Close()
230+
}
231+
if s.lesDb != nil {
232+
s.lesDb.Close()
233+
}
226234
s.wg.Wait()
227235
log.Info("Les server stopped")
228236

les/test_helper.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ func testIndexers(db ethdb.Database, odr light.OdrBackend, config *light.Indexer
189189
return indexers[:]
190190
}
191191

192-
func newTestClientHandler(backend *backends.SimulatedBackend, odr *LesOdr, indexers []*core.ChainIndexer, db ethdb.Database, peers *serverPeerSet, ulcServers []string, ulcFraction int) *clientHandler {
192+
func newTestClientHandler(backend *backends.SimulatedBackend, odr *LesOdr, indexers []*core.ChainIndexer, db ethdb.Database, peers *serverPeerSet, ulcServers []string, ulcFraction int) (*clientHandler, func()) {
193193
var (
194194
evmux = new(event.TypeMux)
195195
engine = ethash.NewFaker()
@@ -245,10 +245,12 @@ func newTestClientHandler(backend *backends.SimulatedBackend, odr *LesOdr, index
245245
client.oracle.Start(backend)
246246
}
247247
client.handler.start()
248-
return client.handler
248+
return client.handler, func() {
249+
client.handler.stop()
250+
}
249251
}
250252

251-
func newTestServerHandler(blocks int, indexers []*core.ChainIndexer, db ethdb.Database, clock mclock.Clock) (*serverHandler, *backends.SimulatedBackend) {
253+
func newTestServerHandler(blocks int, indexers []*core.ChainIndexer, db ethdb.Database, clock mclock.Clock) (*serverHandler, *backends.SimulatedBackend, func()) {
252254
var (
253255
gspec = core.Genesis{
254256
Config: params.AllEthashProtocolChanges,
@@ -314,7 +316,8 @@ func newTestServerHandler(blocks int, indexers []*core.ChainIndexer, db ethdb.Da
314316
}
315317
server.servingQueue.setThreads(4)
316318
server.handler.start()
317-
return server.handler, simulation
319+
closer := func() { server.Stop() }
320+
return server.handler, simulation, closer
318321
}
319322

320323
func alwaysTrueFn() bool {
@@ -600,8 +603,8 @@ func newClientServerEnv(t *testing.T, config testnetConfig) (*testServer, *testC
600603
ccIndexer, cbIndexer, cbtIndexer := cIndexers[0], cIndexers[1], cIndexers[2]
601604
odr.SetIndexers(ccIndexer, cbIndexer, cbtIndexer)
602605

603-
server, b := newTestServerHandler(config.blocks, sindexers, sdb, clock)
604-
client := newTestClientHandler(b, odr, cIndexers, cdb, speers, config.ulcServers, config.ulcFraction)
606+
server, b, serverClose := newTestServerHandler(config.blocks, sindexers, sdb, clock)
607+
client, clientClose := newTestClientHandler(b, odr, cIndexers, cdb, speers, config.ulcServers, config.ulcFraction)
605608

606609
scIndexer.Start(server.blockchain)
607610
sbIndexer.Start(server.blockchain)
@@ -658,7 +661,10 @@ func newClientServerEnv(t *testing.T, config testnetConfig) (*testServer, *testC
658661
cbIndexer.Close()
659662
scIndexer.Close()
660663
sbIndexer.Close()
664+
dist.close()
665+
serverClose()
661666
b.Close()
667+
clientClose()
662668
}
663669
return s, c, teardown
664670
}

0 commit comments

Comments
 (0)