Add new feature to mutex and semaphore - cancelUnlockWaiters: Cancel pending unlocks. #82
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hello @DirtyHairy , I added a new method
cancelUnlockWaiters
tomutex
andsemaphore
. When this method is called, all pending unlock waiters will be cancelled, i.e. calls towaitForUnlock
will be rejected with the errorE_UNLOCKWAITERS_CANCELED
.A scenario where
cancelUnlockWaiters
would be useful is when a background reauthorization failed. When the reauthorization failed, there's no need to run other pending requests.This idea came to me when I was implementing reauthorization with RTK Query, there exists a function to cancel all pending locks, however, no corresponding function exists to cancel pending unlocks, so I thought I might as well just make a pull request for such functionality.
Here's a simplified example of using
cancelUnlockWaiters
:If you want to include this example in the
readme.md
, feel free to do so.About customizing the error for
cancelUnlockWaiters
, we could take the approach of passing an object toMutex
orSemaphore
for both cancelError and unlockCancelError, but that might cause breaking change, so I choose the approach of passing custom unlockCancelError as another argument toMutex
orSemaphore
. This means that if a user wants to keep the default cancelError but customize the unlockCancelError, they have to implicitly importE_CANCELED
and pass it toMutex
orSemaphore
.Thank you for this great library!