diff --git a/CHANGELOG.md b/CHANGELOG.md index be2ec6184a..0fca4f32ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ Changelog for NeoFS Node - Incorrect address mapping of the Alphabet contracts in NNS produced by deployment procedure (#2713) - IR compares and logs public keys difference, not hash of keys difference at SN verification check (#2711) - Incorrect handling of notary request leading to inability to collect signatures in some cases (#2715) +- Deadlock in autodeploy routine (#2720) ### Changed - Created files are not group writable (#2589) diff --git a/pkg/morph/client/notifications.go b/pkg/morph/client/notifications.go index 0c26eca2f2..cf755db2e8 100644 --- a/pkg/morph/client/notifications.go +++ b/pkg/morph/client/notifications.go @@ -206,8 +206,6 @@ func (c *Client) Notifications() (<-chan *state.ContainedNotificationEvent, <-ch } type subscriptions struct { - sync.RWMutex - // notification consumers (Client sends // notifications to these channels) notifyChan chan *state.ContainedNotificationEvent @@ -220,6 +218,8 @@ type subscriptions struct { curBlockChan chan *block.Block curNotaryChan chan *result.NotaryRequestEvent + sync.RWMutex // for subscription fields only + // cached subscription information subscribedEvents map[util.Uint160]struct{} subscribedToAllNotaryEvents bool @@ -237,11 +237,11 @@ func (c *Client) routeNotifications() { routeloop: for { var connLost bool - c.subs.RLock() + c.switchLock.RLock() notifCh := c.subs.curNotifyChan blCh := c.subs.curBlockChan notaryCh := c.subs.curNotaryChan - c.subs.RUnlock() + c.switchLock.RUnlock() select { case <-c.closeChan: break routeloop