diff options
| author | Konstantin Lebedev <9497591+kmlebedev@users.noreply.github.com> | 2022-07-21 17:15:10 +0500 |
|---|---|---|
| committer | Konstantin Lebedev <9497591+kmlebedev@users.noreply.github.com> | 2022-07-21 17:15:10 +0500 |
| commit | 3c42814b5885b0ae10631c6a8a66b858c7923380 (patch) | |
| tree | 90217b781b9c88ddbceb8cfadf635cf32f70c1ca | |
| parent | 03a0936556e01e7beef2599d6f4453c5c8829632 (diff) | |
| download | seaweedfs-3c42814b5885b0ae10631c6a8a66b858c7923380.tar.xz seaweedfs-3c42814b5885b0ae10631c6a8a66b858c7923380.zip | |
avoid deadlock
| -rw-r--r-- | weed/server/master_server.go | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/weed/server/master_server.go b/weed/server/master_server.go index 03a3f74d1..6c0b6652b 100644 --- a/weed/server/master_server.go +++ b/weed/server/master_server.go @@ -368,8 +368,16 @@ func (ms *MasterServer) OnPeerUpdate(update *master_pb.ClusterNodeUpdate, startF } } ms.onPeerUpdateLock.RLock() - if len(ms.onPeerUpdateDoneCns) > 0 { - for _, onPeerUpdateDoneCn := range ms.onPeerUpdateDoneCns { + isGtZero := len(ms.onPeerUpdateDoneCns) > 0 + ms.onPeerUpdateLock.RUnlock() + if isGtZero { + var chanPtrs []*chan string + ms.onPeerUpdateLock.RLock() + for _, cn := range ms.onPeerUpdateDoneCns { + chanPtrs = append(chanPtrs, cn) + } + ms.onPeerUpdateLock.RUnlock() + for _, onPeerUpdateDoneCn := range chanPtrs { *onPeerUpdateDoneCn <- peerName } } |
