| 522 | } |
| 523 | return Effect.void |
| 524 | })) |
| 525 | |
| 526 | const invalidatePoolItem = <A, E>(self: Pool<A, E>, poolItem: PoolItem<A, E>): Effect.Effect<void> => |
| 527 | Effect.suspend(() => { |
| 528 | if (!self.state.items.has(poolItem)) { |
| 529 | return Effect.void |
| 530 | } else if (poolItem.refCount === 0) { |
| 531 | self.state.items.delete(poolItem) |
| 532 | self.state.available.delete(poolItem) |
| 533 | self.state.invalidated.delete(poolItem) |
| 534 | return Effect.asVoid(Effect.flatMap( |
| 535 | poolItem.finalizer, |
| 536 | () => Effect.forkIn(Effect.interruptible(resize(self)), self.state.scope) |
| 537 | )) |
| 538 | } |
| 539 | self.state.invalidated.add(poolItem) |
| 540 | self.state.available.delete(poolItem) |
| 541 | return Effect.void |
| 542 | }) |
| 543 | |