Skip to content

Commit 6eda8c7

Browse files
Merge pull request #635 from shutter-network/fix/client-close
fix: keyper hanging issue
2 parents cd45762 + 715cde7 commit 6eda8c7

File tree

8 files changed

+67
-26
lines changed

8 files changed

+67
-26
lines changed

rolling-shutter/keyperimpl/gnosis/keyper.go

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -295,17 +295,29 @@ func (kpr *Keyper) processInputs(ctx context.Context) error {
295295
}
296296
}
297297

298-
func (kpr *Keyper) channelNewBlock(_ context.Context, ev *syncevent.LatestBlock) error {
299-
kpr.newBlocks <- ev
300-
return nil
298+
func (kpr *Keyper) channelNewBlock(ctx context.Context, ev *syncevent.LatestBlock) error {
299+
select {
300+
case kpr.newBlocks <- ev:
301+
return nil
302+
case <-ctx.Done():
303+
return ctx.Err()
304+
}
301305
}
302306

303-
func (kpr *Keyper) channelNewKeyperSet(_ context.Context, ev *syncevent.KeyperSet) error {
304-
kpr.newKeyperSets <- ev
305-
return nil
307+
func (kpr *Keyper) channelNewKeyperSet(ctx context.Context, ev *syncevent.KeyperSet) error {
308+
select {
309+
case kpr.newKeyperSets <- ev:
310+
return nil
311+
case <-ctx.Done():
312+
return ctx.Err()
313+
}
306314
}
307315

308-
func (kpr *Keyper) channelNewEonPublicKey(_ context.Context, key keyper.EonPublicKey) error {
309-
kpr.newEonPublicKeys <- key
310-
return nil
316+
func (kpr *Keyper) channelNewEonPublicKey(ctx context.Context, key keyper.EonPublicKey) error {
317+
select {
318+
case kpr.newEonPublicKeys <- key:
319+
return nil
320+
case <-ctx.Done():
321+
return ctx.Err()
322+
}
311323
}

rolling-shutter/keyperimpl/gnosis/newslot.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,12 @@ func (kpr *Keyper) triggerDecryption(
266266
Int("num-identities", len(trigger.IdentityPreimages)).
267267
Int64("tx-pointer", txPointer).
268268
Msg("sending decryption trigger")
269-
kpr.decryptionTriggerChannel <- event
269+
270+
select {
271+
case kpr.decryptionTriggerChannel <- event:
272+
case <-ctx.Done():
273+
return ctx.Err()
274+
}
270275

271276
return nil
272277
}

rolling-shutter/keyperimpl/shutterservice/keyper.go

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -274,17 +274,29 @@ func (kpr *Keyper) processInputs(ctx context.Context) error {
274274
}
275275
}
276276

277-
func (kpr *Keyper) channelNewEonPublicKey(_ context.Context, key keyper.EonPublicKey) error {
278-
kpr.newEonPublicKeys <- key
279-
return nil
277+
func (kpr *Keyper) channelNewEonPublicKey(ctx context.Context, key keyper.EonPublicKey) error {
278+
select {
279+
case kpr.newEonPublicKeys <- key:
280+
return nil
281+
case <-ctx.Done():
282+
return ctx.Err()
283+
}
280284
}
281285

282-
func (kpr *Keyper) channelNewBlock(_ context.Context, ev *syncevent.LatestBlock) error {
283-
kpr.newBlocks <- ev
284-
return nil
286+
func (kpr *Keyper) channelNewBlock(ctx context.Context, ev *syncevent.LatestBlock) error {
287+
select {
288+
case kpr.newBlocks <- ev:
289+
return nil
290+
case <-ctx.Done():
291+
return ctx.Err()
292+
}
285293
}
286294

287-
func (kpr *Keyper) channelNewKeyperSet(_ context.Context, ev *syncevent.KeyperSet) error {
288-
kpr.newKeyperSets <- ev
289-
return nil
295+
func (kpr *Keyper) channelNewKeyperSet(ctx context.Context, ev *syncevent.KeyperSet) error {
296+
select {
297+
case kpr.newKeyperSets <- ev:
298+
return nil
299+
case <-ctx.Done():
300+
return ctx.Err()
301+
}
290302
}

rolling-shutter/medley/chainsync/client.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,13 @@ func (s *Client) ChainID(ctx context.Context) (*big.Int, error) {
146146
return s.chainID, nil
147147
}
148148

149-
func (s *Client) Start(_ context.Context, runner service.Runner) error {
149+
func (s *Client) Start(ctx context.Context, runner service.Runner) error {
150+
runner.Go(func() error {
151+
<-ctx.Done()
152+
s.Client.Close()
153+
s.log.Debug("chainsync client closed")
154+
return nil
155+
})
150156
return runner.StartService(s.getServices()...)
151157
}
152158

rolling-shutter/medley/channel/channel.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ func Forward[T any](ctx context.Context,
1212
if !ok {
1313
return nil
1414
}
15-
send <- val
15+
select {
16+
case send <- val:
17+
case <-ctx.Done():
18+
return ctx.Err()
19+
}
1620
case <-ctx.Done():
1721
return ctx.Err()
1822
}

rolling-shutter/medley/slotticker/slotticker.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,11 @@ func (t *SlotTicker) run(ctx context.Context) error {
9292

9393
timeToNextSlot := nextTickTime.Sub(now)
9494
timer.Reset(timeToNextSlot)
95-
<-timer.C
95+
select {
96+
case <-timer.C:
97+
case <-ctx.Done():
98+
return ctx.Err()
99+
}
96100

97101
if err := t.tick(ctx, nextSlotNumber); err != nil {
98102
return err

rolling-shutter/p2p/bootstrap.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ func bootstrap(
100100
_, err := retry.FunctionCall(
101101
ctx,
102102
f,
103+
retry.NumberOfRetries(10),
103104
retry.StopOnErrors(errInsufficientBootstrpConfigured),
104105
retry.Interval(2*time.Second))
105106
if err != nil {

rolling-shutter/p2p/p2p.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,6 @@ func (p *P2PNode) Run(
103103
p.mux.Lock()
104104
defer p.mux.Unlock()
105105

106-
runner.Defer(func() {
107-
close(p.GossipMessages)
108-
})
109-
110106
if err := p.init(ctx); err != nil {
111107
return err
112108
}
@@ -120,6 +116,7 @@ func (p *P2PNode) Run(
120116
if err := p.dht.Close(); err != nil {
121117
log.Error().Err(err).Msg("error closing dht")
122118
}
119+
close(p.GossipMessages)
123120
log.Debug().Msg("host closed")
124121
return nil
125122
})

0 commit comments

Comments
 (0)