aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Lebedev <9497591+kmlebedev@users.noreply.github.com>2022-07-21 17:15:10 +0500
committerKonstantin Lebedev <9497591+kmlebedev@users.noreply.github.com>2022-07-21 17:15:10 +0500
commit3c42814b5885b0ae10631c6a8a66b858c7923380 (patch)
tree90217b781b9c88ddbceb8cfadf635cf32f70c1ca
parent03a0936556e01e7beef2599d6f4453c5c8829632 (diff)
downloadseaweedfs-3c42814b5885b0ae10631c6a8a66b858c7923380.tar.xz
seaweedfs-3c42814b5885b0ae10631c6a8a66b858c7923380.zip
avoid deadlock
-rw-r--r--weed/server/master_server.go12
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
}
}