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)
|
yield* cancelBackgroundJobs(background, sessionID)
|
||||||
const data = yield* InstanceState.get(state)
|
const data = yield* InstanceState.get(state)
|
||||||
const existing = data.runners.get(sessionID)
|
const existing = data.runners.get(sessionID)
|
||||||
if (!existing || !existing.busy) {
|
if (!existing) {
|
||||||
yield* status.set(sessionID, { type: "idle" })
|
yield* status.set(sessionID, { type: "idle" })
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -320,10 +320,9 @@ const useServerConfig = Effect.fn("test.useServerConfig")(function* (config: (ur
|
|||||||
return { dir, llm }
|
return { dir, llm }
|
||||||
})
|
})
|
||||||
|
|
||||||
// Wait for a session's runner to enter a busy state. SessionStatus is flipped to
|
// Wait for a session's runner to enter a busy state. SessionStatus is flipped
|
||||||
// "busy" inside Runner.startShell's modifyEffect at the same moment the runner
|
// inside Runner.startShell's serialized transition, so cancel can't no-op once
|
||||||
// is registered, so this is a deterministic readiness signal — cancel can't
|
// we observe it.
|
||||||
// no-op once we observe it.
|
|
||||||
const waitForBusy = (sessionID: SessionID, duration: Duration.Input = "2 seconds") =>
|
const waitForBusy = (sessionID: SessionID, duration: Duration.Input = "2 seconds") =>
|
||||||
pollWithTimeout(
|
pollWithTimeout(
|
||||||
Effect.gen(function* () {
|
Effect.gen(function* () {
|
||||||
|
|||||||
Reference in New Issue
Block a user