diff options
| author | LHHDZ <changlin.shi@ly.com> | 2024-06-03 22:42:40 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-03 07:42:40 -0700 |
| commit | 36b5b713ba043ec8c59a65e1af64889e5f6ad35f (patch) | |
| tree | 3a702615420300c699e4d2bdf95e16985860fc04 | |
| parent | d8bde9b96e1e314534cd76345c61c623c5824132 (diff) | |
| download | seaweedfs-36b5b713ba043ec8c59a65e1af64889e5f6ad35f.tar.xz seaweedfs-36b5b713ba043ec8c59a65e1af64889e5f6ad35f.zip | |
fix deadlock caused by message chan blocked (#5639)
| -rw-r--r-- | weed/server/master_grpc_server.go | 8 |
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() } |
