mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-21 18:26:09 +00:00
fix(opencode): avoid shell cancel race (#30641)
This commit is contained in:
@@ -78,7 +78,7 @@ export const layer = Layer.effect(
|
||||
yield* cancelBackgroundJobs(background, sessionID)
|
||||
const data = yield* InstanceState.get(state)
|
||||
const existing = data.runners.get(sessionID)
|
||||
if (!existing || !existing.busy) {
|
||||
if (!existing) {
|
||||
yield* status.set(sessionID, { type: "idle" })
|
||||
return
|
||||
}
|
||||
|
||||
@@ -320,10 +320,9 @@ const useServerConfig = Effect.fn("test.useServerConfig")(function* (config: (ur
|
||||
return { dir, llm }
|
||||
})
|
||||
|
||||
// Wait for a session's runner to enter a busy state. SessionStatus is flipped to
|
||||
// "busy" inside Runner.startShell's modifyEffect at the same moment the runner
|
||||
// is registered, so this is a deterministic readiness signal — cancel can't
|
||||
// no-op once we observe it.
|
||||
// Wait for a session's runner to enter a busy state. SessionStatus is flipped
|
||||
// inside Runner.startShell's serialized transition, so cancel can't no-op once
|
||||
// we observe it.
|
||||
const waitForBusy = (sessionID: SessionID, duration: Duration.Input = "2 seconds") =>
|
||||
pollWithTimeout(
|
||||
Effect.gen(function* () {
|
||||
|
||||
Reference in New Issue
Block a user