diff options
author | Jon Gjengset <jon@thesquareplanet.com> | 2020-04-20 19:18:47 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-20 19:18:47 -0400 |
commit | 282b00cbe888a96669877ce70662fba87e8c0e3c (patch) | |
tree | 49482c1ffc2862e8154fe81aec5a3c24eac8ba5a /tokio/src/task/local.rs | |
parent | 5a548044d7bfd5d1c59d1a398d34ccbc29cbfe70 (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/local.rs')
-rw-r--r-- | tokio/src/task/local.rs | 2 |
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); } |