diff --git a/.changeset/thirty-phones-leave.md b/.changeset/thirty-phones-leave.md new file mode 100644 index 0000000..77de68c --- /dev/null +++ b/.changeset/thirty-phones-leave.md @@ -0,0 +1,5 @@ +--- +"@effect-rx/rx": patch +--- + +disable TTL if idleTTL is set to 0 diff --git a/packages/rx/src/internal/registry.ts b/packages/rx/src/internal/registry.ts index a33e405..f1e21db 100644 --- a/packages/rx/src/internal/registry.ts +++ b/packages/rx/src/internal/registry.ts @@ -94,12 +94,16 @@ class RegistryImpl implements Registry.Registry { return this.subscribe(rx, constListener, constImmediate) } + rxHasTTL(rx: Rx.Rx): boolean { + return !rx.keepAlive && rx.idleTTL !== 0 && (rx.idleTTL !== undefined || this.defaultIdleTTL !== undefined) + } + ensureNode(rx: Rx.Rx): Node { let node = this.nodes.get(rx) if (node === undefined) { node = this.createNode(rx) this.nodes.set(rx, node) - } else if (!rx.keepAlive && (rx.idleTTL || this.defaultIdleTTL)) { + } else if (this.rxHasTTL(rx)) { this.removeNodeTimeout(node) } return node @@ -138,7 +142,7 @@ class RegistryImpl implements Registry.Registry { } removeNode(node: Node): void { - if (!node.rx.keepAlive && (node.rx.idleTTL || this.defaultIdleTTL)) { + if (this.rxHasTTL(node.rx)) { this.setNodeTimeout(node) } else { this.nodes.delete(node.rx) diff --git a/packages/rx/src/internal/runtime.ts b/packages/rx/src/internal/runtime.ts index 88c4433..1095e76 100644 --- a/packages/rx/src/internal/runtime.ts +++ b/packages/rx/src/internal/runtime.ts @@ -4,6 +4,7 @@ import { NoSuchElementException } from "effect/Cause" import type * as Effect from "effect/Effect" import * as Exit from "effect/Exit" +import * as FiberId from "effect/FiberId" import * as Runtime from "effect/Runtime" import { SyncScheduler } from "effect/Scheduler" @@ -50,6 +51,6 @@ export const runCallbackSync = fiberRuntime.addObserver(onExit) return function() { fiberRuntime.removeObserver(onExit) - fiberRuntime.unsafeInterruptAsFork(fiberRuntime.id()) + fiberRuntime.unsafeInterruptAsFork(FiberId.none) } }