diff --git a/.changeset/green-socks-occur.md b/.changeset/green-socks-occur.md new file mode 100644 index 0000000000..4072de30bf --- /dev/null +++ b/.changeset/green-socks-occur.md @@ -0,0 +1,5 @@ +--- +"@effect/platform-browser": patch +--- + +ensure last port in browser worker closes naturally with the outer scope diff --git a/packages/platform-browser/src/internal/workerRunner.ts b/packages/platform-browser/src/internal/workerRunner.ts index bc7cc1f675..fc29cb1a44 100644 --- a/packages/platform-browser/src/internal/workerRunner.ts +++ b/packages/platform-browser/src/internal/workerRunner.ts @@ -59,13 +59,14 @@ export const make = (self: MessagePort | Window) => FiberSet.unsafeAdd(fiberSet, fiber) } else { const port = ports.get(portId) - if (port) { - Effect.runFork(Scope.close(port[1], Exit.void)) + if (!port) { + return + } else if (ports.size === 1) { + // let the last port close with the outer scope + return Deferred.unsafeDone(closeLatch, Exit.void) } ports.delete(portId) - if (ports.size === 0) { - Deferred.unsafeDone(closeLatch, Exit.void) - } + Effect.runFork(Scope.close(port[1], Exit.void)) } } }