summaryrefslogtreecommitdiffstats
path: root/tokio/src/sync/batch_semaphore.rs
diff options
context:
space:
mode:
authorCarl Lerche <me@carllerche.com>2020-05-06 19:02:07 -0700
committerGitHub <noreply@github.com>2020-05-06 19:02:07 -0700
commit4748b2571fc02d5ebbfe59e457f0e8d8ef0eb5f3 (patch)
tree73da1e3baba02bad5411a222ff62490304932fe7 /tokio/src/sync/batch_semaphore.rs
parent66fef4a9bcccd944e3b72b1e83f789e4131d4e52 (diff)
rt: simplify coop implementation (#2498)
Simplifies coop implementation. Prunes unused code, create a `Budget` type to track the current budget.
Diffstat (limited to 'tokio/src/sync/batch_semaphore.rs')
-rw-r--r--tokio/src/sync/batch_semaphore.rs4
1 files changed, 4 insertions, 0 deletions
diff --git a/tokio/src/sync/batch_semaphore.rs b/tokio/src/sync/batch_semaphore.rs
index 436737a6..698e908e 100644
--- a/tokio/src/sync/batch_semaphore.rs
+++ b/tokio/src/sync/batch_semaphore.rs
@@ -386,7 +386,11 @@ impl Future for Acquire<'_> {
type Output = Result<(), AcquireError>;
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
+ // First, ensure the current task has enough budget to proceed.
+ ready!(crate::coop::poll_proceed(cx));
+
let (node, semaphore, needed, queued) = self.project();
+
match semaphore.poll_acquire(cx, needed, node, *queued) {
Pending => {
*queued = true;