summaryrefslogtreecommitdiffstats
path: root/tokio/src/sync/semaphore.rs
diff options
context:
space:
mode:
authorCarl Lerche <me@carllerche.com>2020-01-03 10:34:15 -0800
committerGitHub <noreply@github.com>2020-01-03 10:34:15 -0800
commitefcbf9613f2d5048550f9c828e3be422644f1391 (patch)
treef8c77a9d21c57f80ed989d16839acffe850baf77 /tokio/src/sync/semaphore.rs
parent3736467dbb74ea6d14091cf1cac3ce08e1fcb911 (diff)
sync: add batch op support to internal semaphore (#2004)
Extend internal semaphore to support batch operations. With this PR, consumers of the semaphore are able to atomically request more than one permit. This is useful for implementing a RwLock.
Diffstat (limited to 'tokio/src/sync/semaphore.rs')
-rw-r--r--tokio/src/sync/semaphore.rs8
1 files changed, 4 insertions, 4 deletions
diff --git a/tokio/src/sync/semaphore.rs b/tokio/src/sync/semaphore.rs
index 2cfb5d34..13d5cfb2 100644
--- a/tokio/src/sync/semaphore.rs
+++ b/tokio/src/sync/semaphore.rs
@@ -60,7 +60,7 @@ impl Semaphore {
sem: &self,
ll_permit: ll::Permit::new(),
};
- poll_fn(|cx| permit.ll_permit.poll_acquire(cx, &self.ll_sem))
+ poll_fn(|cx| permit.ll_permit.poll_acquire(cx, 1, &self.ll_sem))
.await
.unwrap();
permit
@@ -69,7 +69,7 @@ impl Semaphore {
/// Try to acquire a permit form the semaphore
pub fn try_acquire(&self) -> Result<SemaphorePermit<'_>, TryAcquireError> {
let mut ll_permit = ll::Permit::new();
- match ll_permit.try_acquire(&self.ll_sem) {
+ match ll_permit.try_acquire(1, &self.ll_sem) {
Ok(_) => Ok(SemaphorePermit {
sem: self,
ll_permit,
@@ -84,12 +84,12 @@ impl<'a> SemaphorePermit<'a> {
/// This can be used to reduce the amount of permits available from a
/// semaphore.
pub fn forget(mut self) {
- self.ll_permit.forget();
+ self.ll_permit.forget(1);
}
}
impl<'a> Drop for SemaphorePermit<'_> {
fn drop(&mut self) {
- self.ll_permit.release(&self.sem.ll_sem);
+ self.ll_permit.release(1, &self.sem.ll_sem);
}
}