From 7573c966c55e7ceb4c532b96d6dadcb30fe622b4 Mon Sep 17 00:00:00 2001 From: "yzb@example.cn" Date: Mon, 11 Apr 2022 11:22:27 +0800 Subject: [PATCH] bugfix/gracefull-shutdown --- eth/handler_diff.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/eth/handler_diff.go b/eth/handler_diff.go index c996105f0..a5fbfdb0a 100644 --- a/eth/handler_diff.go +++ b/eth/handler_diff.go @@ -33,6 +33,18 @@ func (h *diffHandler) Chain() *core.BlockChain { return h.chain } // RunPeer is invoked when a peer joins on the `diff` protocol. func (h *diffHandler) RunPeer(peer *diff.Peer, hand diff.Handler) error { if err := peer.Handshake(h.diffSync); err != nil { + // ensure that waitDiffExtension receives the exit signal normally + // otherwise, can't graceful shutdown + ps := h.peers + id := peer.ID() + + // Ensure nobody can double connect + ps.lock.Lock() + if wait, ok := ps.diffWait[id]; ok { + delete(ps.diffWait, id) + wait <- peer + } + ps.lock.Unlock() return err } defer h.chain.RemoveDiffPeer(peer.ID())