summaryrefslogtreecommitdiffstats
path: root/tokio/src/task
diff options
context:
space:
mode:
authorJon Gjengset <jon@thesquareplanet.com>2020-04-20 19:18:47 -0400
committerGitHub <noreply@github.com>2020-04-20 19:18:47 -0400
commit282b00cbe888a96669877ce70662fba87e8c0e3c (patch)
tree49482c1ffc2862e8154fe81aec5a3c24eac8ba5a /tokio/src/task
parent5a548044d7bfd5d1c59d1a398d34ccbc29cbfe70 (diff)
Be more principled about when blocking is ok (#2410)
This enables `block_in_place` to be used in more contexts. Specifically, it allows you to block whenever you are off the tokio runtime (like if you are not using tokio, are in a `spawn_blocking` closure, etc.), and in the threaded scheduler's `block_on`. Blocking in `LocalSet` and the basic scheduler's` block_on` is still disallowed. Fixes #2327. Fixes #2393.
Diffstat (limited to 'tokio/src/task')
-rw-r--r--tokio/src/task/local.rs2
1 files changed, 2 insertions, 0 deletions
diff --git a/tokio/src/task/local.rs b/tokio/src/task/local.rs
index edecb04b..9af50cee 100644
--- a/tokio/src/task/local.rs
+++ b/tokio/src/task/local.rs
@@ -520,6 +520,8 @@ impl<T: Future> Future for RunUntil<'_, T> {
.waker
.register_by_ref(cx.waker());
+ let _no_blocking = crate::runtime::enter::disallow_blocking();
+
if let Poll::Ready(output) = me.future.poll(cx) {
return Poll::Ready(output);
}