executor: add executor::exit (#1155)

This allows blocking on executors from within a `threadpool::blocking` call.
This commit is contained in:
Sean McArthur
2019-06-24 09:22:54 -07:00
committed by Carl Lerche
parent 5dcb379f6d
commit cad0c35623
6 changed files with 71 additions and 4 deletions
+6 -2
View File
@@ -1,6 +1,7 @@
use worker::Worker;
use futures::Poll;
use tokio_executor;
use std::error::Error;
use std::fmt;
@@ -142,8 +143,11 @@ where
// If the transition cannot happen, exit early
try_ready!(res);
// Currently in blocking mode, so call the inner closure
let ret = f();
// Currently in blocking mode, so call the inner closure.
//
// "Exit" the current executor in case the blocking function wants
// to call a different executor.
let ret = tokio_executor::exit(move || f());
// Try to transition out of blocking mode. This is a fast path that takes
// back ownership of the worker if the worker handoff didn't complete yet.