Crate permit[−][src]
permit
permit::Permit
is a struct for cancelling operations.
Use Cases
- Graceful server shutdown
- Cancel operations that take too long
- Stop in-flight operations when revoking authorization
Features
- Subordinate permits. Revoking a permit also revokes its subordinates, recursively.
- Drop a permit to revoke its subordinates, recursively.
- Wait for all subordinate permits to drop.
- Implements
Future
. You canawait
a permit and return when it is revoked. - Similar to Golang’s
context
- Depends only on
std
. forbid(unsafe_code)
- 100% test coverage
Limitations
- Does not hold data values
- Allocates. Uses
alloc::sync::Arc
.
Alternatives
async_ctx
- Good API
- Async only
io-context
- Holds Any values
- Unmaintained
ctx
Related Crates
Example
Graceful shutdown:
let top_permit = permit::Permit::new(); // Start some worker threads. for _ in 0..5 { let permit = top_permit.new_sub(); std::thread::spawn(move || { while !permit.is_revoked() { // ... } }); } wait_for_shutdown_signal(); // Revoke all thread permits and wait for them to // finish and drop their permits. top_permit.revoke().try_wait_for( core::time::Duration::from_secs(3));
Cargo Geiger Safety Report
Changelog
- v0.1.4 - Fix bug
where
revoke()
and thenwait()
would not wait. - v0.1.3
- Don’t keep or wake stale
std::task::Waker
structs. - Eliminate race that causes unnecessary wake.
- Don’t keep or wake stale
- v0.1.2 - Implement
Future
- v0.1.1 - Make
revoke
return&Self
- v0.1.0 - Initial version
Happy Contributors 🙂
Fixing bugs and adding features is easy and fast. Send us a pull request and we intend to:
- Always respond within 24 hours
- Provide clear & concrete feedback
- Immediately make a new release for your accepted change
Structs
DeadlineExceeded | |
Permit | A struct for cancelling operations. |