diff --git a/tokio/src/sync/semaphore.rs b/tokio/src/sync/semaphore.rs index a952729b563..0955554d2f3 100644 --- a/tokio/src/sync/semaphore.rs +++ b/tokio/src/sync/semaphore.rs @@ -994,7 +994,9 @@ impl<'a> SemaphorePermit<'a> { /// Splits `n` permits from `self` and returns a new [`SemaphorePermit`] instance that holds `n` permits. /// /// If there are insufficient permits and it's not possible to reduce by `n`, returns `None`. - pub fn split(&mut self, n: u32) -> Option { + pub fn split(&mut self, n: usize) -> Option { + let n = u32::try_from(n).ok()?; + if n > self.permits { return None; } @@ -1008,8 +1010,8 @@ impl<'a> SemaphorePermit<'a> { } /// Returns the number of permits held by `self`. - pub fn num_permits(&self) -> u32 { - self.permits + pub fn num_permits(&self) -> usize { + self.permits as usize } } @@ -1047,7 +1049,9 @@ impl OwnedSemaphorePermit { /// # Note /// /// It will clone the owned `Arc` to construct the new instance. - pub fn split(&mut self, n: u32) -> Option { + pub fn split(&mut self, n: usize) -> Option { + let n = u32::try_from(n).ok()?; + if n > self.permits { return None; } @@ -1066,8 +1070,8 @@ impl OwnedSemaphorePermit { } /// Returns the number of permits held by `self`. - pub fn num_permits(&self) -> u32 { - self.permits + pub fn num_permits(&self) -> usize { + self.permits as usize } }