fix: prevent deadlock when stream error occurs - make cmds send non-blocking

If managerLoop is blocked (e.g., waiting on regWait), a blocking send to cmds
will deadlock handleIncoming. Make the send non-blocking to prevent this.
This commit is contained in:
Chris Lu
2025-12-22 00:16:03 -08:00
parent 85369414f9
commit 3ebbd25a4b

View File

@@ -446,8 +446,12 @@ func handleIncoming(
default:
}
// Report the failure as a command to the managerLoop (blocking)
cmds <- grpcCommand{action: ActionStreamError, data: err}
// Report the failure as a command to the managerLoop (non-blocking to prevent deadlock)
select {
case cmds <- grpcCommand{action: ActionStreamError, data: err}:
default:
glog.V(2).Infof("Manager busy, stream error not queued: %v", err)
}
// Exit the main handler loop
glog.V(1).Infof("INCOMING HANDLER STOPPED: Worker %s stopping incoming handler due to stream error", workerID)