aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLHHDZ <changlin.shi@ly.com>2024-06-03 22:42:40 +0800
committerGitHub <noreply@github.com>2024-06-03 07:42:40 -0700
commit36b5b713ba043ec8c59a65e1af64889e5f6ad35f (patch)
tree3a702615420300c699e4d2bdf95e16985860fc04
parentd8bde9b96e1e314534cd76345c61c623c5824132 (diff)
downloadseaweedfs-36b5b713ba043ec8c59a65e1af64889e5f6ad35f.tar.xz
seaweedfs-36b5b713ba043ec8c59a65e1af64889e5f6ad35f.zip
fix deadlock caused by message chan blocked (#5639)
-rw-r--r--weed/server/master_grpc_server.go8
1 files changed, 8 insertions, 0 deletions
diff --git a/weed/server/master_grpc_server.go b/weed/server/master_grpc_server.go
index b989da424..91f69fef4 100644
--- a/weed/server/master_grpc_server.go
+++ b/weed/server/master_grpc_server.go
@@ -292,6 +292,12 @@ func (ms *MasterServer) KeepConnected(stream master_pb.Seaweed_KeepConnectedServ
_, err := stream.Recv()
if err != nil {
glog.V(2).Infof("- client %v: %v", clientName, err)
+ go func() {
+ // consume message chan to avoid deadlock, go routine exit when message chan is closed
+ for range messageChan {
+ // no op
+ }
+ }()
close(stopChan)
return
}
@@ -367,6 +373,8 @@ func (ms *MasterServer) addClient(filerGroup, clientType string, clientAddress p
func (ms *MasterServer) deleteClient(clientName string) {
glog.V(0).Infof("- client %v", clientName)
ms.clientChansLock.Lock()
+ // close message chan, so that the KeepConnected go routine can exit
+ close(ms.clientChans[clientName])
delete(ms.clientChans, clientName)
ms.clientChansLock.Unlock()
}