Browse Source

fix deadlock caused by message chan blocked (#5639)

pull/5640/head
LHHDZ 7 months ago
committed by GitHub
parent
commit
36b5b713ba
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 8
      weed/server/master_grpc_server.go

8
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()
}

Loading…
Cancel
Save