P2 из ревью Codex на #71 (тред).
Если worker записал терминальный ответ и вышел, событие этого поколения может стоять в очереди pipeEvents, пока параллельный loadModel видит мёртвый процесс и респавнит воркера. Поколение меняется до того, как pump дочитает ответ, и guard его отбрасывает. Старый exit тоже считается устаревшим, так что запись остаётся в pendingRequests, а её вызывающий ждёт бесконечно.
Починка: связывать запросы с поколением спавна и завершать/фейлить их при смене поколения, а не молча выбрасывать все события старого поколения.
P2 из ревью Codex на #71 (тред).
Если worker записал терминальный ответ и вышел, событие этого поколения может стоять в очереди
pipeEvents, пока параллельныйloadModelвидит мёртвый процесс и респавнит воркера. Поколение меняется до того, как pump дочитает ответ, и guard его отбрасывает. Старый exit тоже считается устаревшим, так что запись остаётся вpendingRequests, а её вызывающий ждёт бесконечно.Починка: связывать запросы с поколением спавна и завершать/фейлить их при смене поколения, а не молча выбрасывать все события старого поколения.