Skip to content

Commit d291e8c

Browse files
committed
Fix possible race condition in server dispatcher
Signed-off-by: Lorenzo <[email protected]>
1 parent 1884a51 commit d291e8c

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

ocppj/dispatcher.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -531,8 +531,19 @@ func (d *DefaultServerDispatcher) messagePump() {
531531
}
532532
if d.pendingRequestState.HasPendingRequest(clientID) {
533533
// Current request for client timed out. Removing request and triggering cancel callback
534-
q, _ := d.queueMap.Get(clientID)
535-
bundle, _ := q.Peek().(RequestBundle)
534+
q, found := d.queueMap.Get(clientID)
535+
if !found {
536+
// Possible race condition: queue was already removed
537+
log.Errorf("dispatcher timeout for client %s triggered, but no request queue found", clientID)
538+
continue
539+
}
540+
el := q.Peek()
541+
if el == nil {
542+
// Should never happen
543+
log.Error("dispatcher timeout for client %s triggered, but no pending request found", clientID)
544+
continue
545+
}
546+
bundle, _ := el.(RequestBundle)
536547
d.CompleteRequest(clientID, bundle.Call.UniqueId)
537548
log.Infof("request %v for %v timed out", bundle.Call.UniqueId, clientID)
538549
if d.onRequestCancel != nil {

0 commit comments

Comments
 (0)