diff --git a/chain/neutrino.go b/chain/neutrino.go index 0803e4d..280ec1e 100644 --- a/chain/neutrino.go +++ b/chain/neutrino.go @@ -201,7 +201,6 @@ func (s *NeutrinoClient) Rescan(startHash *chainhash.Hash, addrs []btcutil.Addre // notification indicating the rescan has "finished". if header.BlockHash() == *startHash { s.finished = true - s.clientMtx.Unlock() select { case s.enqueueNotification <- &RescanFinished{ Hash: startHash, @@ -213,7 +212,6 @@ func (s *NeutrinoClient) Rescan(startHash *chainhash.Hash, addrs []btcutil.Addre case <-s.rescanQuit: return nil } - s.clientMtx.Lock() } s.rescan = s.CS.NewRescan( @@ -249,11 +247,11 @@ func (s *NeutrinoClient) NotifyBlocks() error { // NotifyReceived replicates the RPC client's NotifyReceived command. func (s *NeutrinoClient) NotifyReceived(addrs []btcutil.Address) error { s.clientMtx.Lock() - defer s.clientMtx.Unlock() // If we have a rescan running, we just need to add the appropriate // addresses to the watch list. if s.scanning { + s.clientMtx.Unlock() return s.rescan.Update(neutrino.AddAddrs(addrs...)) } @@ -276,6 +274,7 @@ func (s *NeutrinoClient) NotifyReceived(addrs []btcutil.Address) error { neutrino.WatchAddrs(addrs...), ) s.rescanErr = s.rescan.Start() + s.clientMtx.Unlock() return nil }