| 12345678910111213141516171819202122232425262728293031323334353637 |
- diff --git a/dist/Deferred.js b/dist/Deferred.js
- index dd5334d6e42b0881f411fca56688e639cd49c176..ea200a80d6186f07a29d0d231ff1f038433bfec3 100644
- --- a/dist/Deferred.js
- +++ b/dist/Deferred.js
- @@ -81,8 +81,12 @@ const _await = self => internalEffect.callback(resume => {
- self.resumes ??= [];
- self.resumes.push(resume);
- return internalEffect.sync(() => {
- + // Completion resumes every waiter and clears the array, so a cleanup
- + // that runs after completion (an interrupt racing the resume) has
- + // nothing to unregister.
- + if (!self.resumes) return;
- const index = self.resumes.indexOf(resume);
- - self.resumes.splice(index, 1);
- + if (index >= 0) self.resumes.splice(index, 1);
- });
- });
- export {
- diff --git a/src/Deferred.ts b/src/Deferred.ts
- index f6d37948bfbe690a7998b06c562e434e1b8ae084..da91e4dc0fd32e534fbc72f7beb0514e67e4ce74 100644
- --- a/src/Deferred.ts
- +++ b/src/Deferred.ts
- @@ -188,8 +188,12 @@ const _await = <A, E>(self: Deferred<A, E>): Effect<A, E> =>
- self.resumes ??= []
- self.resumes.push(resume)
- return internalEffect.sync(() => {
- - const index = self.resumes!.indexOf(resume)
- - self.resumes!.splice(index, 1)
- + // Completion resumes every waiter and clears the array, so a cleanup
- + // that runs after completion (an interrupt racing the resume) has
- + // nothing to unregister.
- + if (!self.resumes) return
- + const index = self.resumes.indexOf(resume)
- + if (index >= 0) self.resumes.splice(index, 1)
- })
- })
-
|