A Codex RPC can deadlock the reader it waits on

This commit is contained in:
Ian Gulliver
2026-10-16 14:21:23 -07:00
parent 6ee2421d97
commit 66ff641bbd
5 changed files with 109 additions and 39 deletions
+17 -3
View File
@@ -168,11 +168,20 @@ func (m *Manager) codexItemCompleted(ctx context.Context, l *live, s *codex.Sess
if mt.text == "" {
return nil
}
err = s.Steer(ctx, mt.text)
reply, err := s.Steer(mt.text)
if err != nil {
slog.Error("steer mid-turn delivery", "session", l.id, "err", err)
m.restoreMidTurn(ctx, l, mt)
return nil
}
go func() {
ctx := context.Background()
err := reply.Wait(ctx, nil)
if err != nil {
slog.Error("steer mid-turn delivery", "session", l.id, "err", err)
m.restoreMidTurn(ctx, l, mt)
}
}()
return nil
}
@@ -258,8 +267,13 @@ func (m *Manager) codexTurnCompleted(ctx context.Context, l *live, s *codex.Sess
m.mu.Lock()
l.lastText = ""
m.mu.Unlock()
_, err = s.Send(ctx, proseQuestionNudge)
return err
go func() {
_, err := s.Send(context.Background(), proseQuestionNudge)
if err != nil {
slog.Error("send prose question nudge", "session", l.id, "err", err)
}
}()
return nil
}
res := endResult{