@@ -106,7 +106,7 @@ type Bee struct {
106106 pullSyncCloser io.Closer
107107 pssCloser io.Closer
108108 gsocCloser io.Closer
109- ethClientCloser func ()
109+ ethClientCloser io. Closer
110110 transactionMonitorCloser io.Closer
111111 transactionCloser io.Closer
112112 listenerCloser io.Closer
@@ -394,7 +394,7 @@ func NewBee(
394394 if err != nil {
395395 return nil , fmt .Errorf ("init chain: %w" , err )
396396 }
397- b .ethClientCloser = chainBackend . Close
397+ b .ethClientCloser = chainBackend
398398
399399 logger .Info ("using chain with network network" , "chain_id" , chainID , "network_id" , networkID )
400400
@@ -1282,6 +1282,12 @@ func (b *Bee) SyncingStopped() chan struct{} {
12821282 return b .syncingStopped .C
12831283}
12841284
1285+ // namedCloser is a helper struct to associate a closer with its name.
1286+ type namedCloser struct {
1287+ closer io.Closer
1288+ name string
1289+ }
1290+
12851291func (b * Bee ) Shutdown () error {
12861292 var mErr error
12871293
@@ -1335,42 +1341,27 @@ func (b *Bee) Shutdown() error {
13351341 }
13361342
13371343 var wg sync.WaitGroup
1338- wg .Add (8 )
1339- go func () {
1340- defer wg .Done ()
1341- tryClose (b .pssCloser , "pss" )
1342- }()
1343- go func () {
1344- defer wg .Done ()
1345- tryClose (b .gsocCloser , "gsoc" )
1346- }()
1347- go func () {
1348- defer wg .Done ()
1349- tryClose (b .pusherCloser , "pusher" )
1350- }()
1351- go func () {
1352- defer wg .Done ()
1353- tryClose (b .pullerCloser , "puller" )
1354- }()
1355- go func () {
1356- defer wg .Done ()
1357- tryClose (b .accountingCloser , "accounting" )
1358- }()
13591344
1360- b .ctxCancel ()
1361- go func () {
1362- defer wg .Done ()
1363- tryClose (b .pullSyncCloser , "pull sync" )
1364- }()
1365- go func () {
1366- defer wg .Done ()
1367- tryClose (b .hiveCloser , "hive" )
1368- }()
1369- go func () {
1370- defer wg .Done ()
1371- tryClose (b .saludCloser , "salud" )
1372- }()
1345+ closers := []namedCloser {
1346+ {b .pssCloser , "pss" },
1347+ {b .gsocCloser , "gsoc" },
1348+ {b .pusherCloser , "pusher" },
1349+ {b .pullerCloser , "puller" },
1350+ {b .accountingCloser , "accounting" },
1351+ {b .pullSyncCloser , "pull sync" },
1352+ {b .hiveCloser , "hive" },
1353+ {b .saludCloser , "salud" },
1354+ }
1355+
1356+ wg .Add (len (closers ))
1357+ for _ , nc := range closers {
1358+ go func (c io.Closer , name string ) {
1359+ defer wg .Done ()
1360+ tryClose (c , name )
1361+ }(nc .closer , nc .name )
1362+ }
13731363
1364+ b .ctxCancel ()
13741365 wg .Wait ()
13751366
13761367 tryClose (b .p2pService , "p2p server" )
@@ -1393,10 +1384,7 @@ func (b *Bee) Shutdown() error {
13931384
13941385 wg .Wait ()
13951386
1396- if c := b .ethClientCloser ; c != nil {
1397- c ()
1398- }
1399-
1387+ tryClose (b .ethClientCloser , "eth client" )
14001388 tryClose (b .accesscontrolCloser , "accesscontrol" )
14011389 tryClose (b .tracerCloser , "tracer" )
14021390 tryClose (b .topologyCloser , "topology driver" )
0 commit comments