| 108 | * @categories constructors |
| 109 | */ |
| 110 | export const make = <A = unknown, E = unknown>(): Effect.Effect<FiberHandle<A, E>, never, Scope.Scope> => |
| 111 | Effect.acquireRelease( |
| 112 | Effect.map(Deferred.make<void, E>(), (deferred) => unsafeMake<A, E>(deferred)), |
| 113 | (handle) => |
| 114 | Effect.withFiberRuntime((parent) => { |
| 115 | const state = handle.state |
| 116 | if (state._tag === "Closed") return Effect.void |
| 117 | handle.state = { _tag: "Closed" } |
| 118 | return state.fiber ? |
| 119 | Effect.intoDeferred( |
| 120 | Effect.asVoid(Fiber.interruptAs(state.fiber, FiberId.combine(parent.id(), internalFiberId))), |
| 121 | handle.deferred |
| 122 | ) : |
| 123 | Deferred.done(handle.deferred, Exit.void) |
| 124 | }) |
| 125 | ) |
| 126 | |
| 127 | /** |
| 128 | * Create an Effect run function that is backed by a FiberHandle. |