summaryrefslogtreecommitdiffstats
path: root/tokio/src/runtime/thread_pool
diff options
context:
space:
mode:
authorJon Gjengset <jon@thesquareplanet.com>2020-07-28 19:58:33 -0400
committerGitHub <noreply@github.com>2020-07-28 19:58:33 -0400
commit0366a3e6d1aa4e7bf4a1c717680dd0947589264b (patch)
tree664ca955e90cad981ddfe68fe9804506543cdf99 /tokio/src/runtime/thread_pool
parent03b68f4e7564a3a78fa29bacfe5e306c59145aaa (diff)
Reset coop budget when blocking in block_on (#2711)
Previously, we would fail to reset the coop budget in this case, making it so that `coop::poll_proceed` would perpetually yield `Poll::Pending` in nested executers even when run in `block_in_place`. This is also a further improvement on #2645.
Diffstat (limited to 'tokio/src/runtime/thread_pool')
-rw-r--r--tokio/src/runtime/thread_pool/worker.rs6
1 files changed, 1 insertions, 5 deletions
diff --git a/tokio/src/runtime/thread_pool/worker.rs b/tokio/src/runtime/thread_pool/worker.rs
index abe20da5..c53c9384 100644
--- a/tokio/src/runtime/thread_pool/worker.rs
+++ b/tokio/src/runtime/thread_pool/worker.rs
@@ -199,7 +199,6 @@ cfg_blocking! {
}
}
- let mut had_core = false;
let mut had_entered = false;
CURRENT.with(|maybe_cx| {
@@ -248,7 +247,6 @@ cfg_blocking! {
//
// First, move the core back into the worker's shared core slot.
cx.worker.core.set(core);
- had_core = true;
// Next, clone the worker handle and send it to a new thread for
// processing.
@@ -259,14 +257,12 @@ cfg_blocking! {
runtime::spawn_blocking(move || run(worker));
});
- if had_core {
+ if had_entered {
// Unset the current task's budget. Blocking sections are not
// constrained by task budgets.
let _reset = Reset(coop::stop());
crate::runtime::enter::exit(f)
- } else if had_entered {
- crate::runtime::enter::exit(f)
} else {
f()
}