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
cancelUnlockWaiterstomutexandsemaphore. When this method is called, all pending unlock waiters will be cancelled, i.e. calls towaitForUnlockwill be rejected with the errorE_UNLOCKWAITERS_CANCELED.A scenario where
cancelUnlockWaiterswould 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 toMutexorSemaphorefor both cancelError and unlockCancelError, but that might cause breaking change, so I choose the approach of passing custom unlockCancelError as another argument toMutexorSemaphore. This means that if a user wants to keep the default cancelError but customize the unlockCancelError, they have to implicitly importE_CANCELEDand pass it toMutexorSemaphore.Thank you for this great library!