Merge pull request #1108 from thegedge/faster-pipelines

Wait for process instead of polling its status.
This commit is contained in:
Jonathan Turner 2019-12-23 07:06:16 +13:00 committed by GitHub
commit 1fe85cb91e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -170,29 +170,17 @@ pub(crate) async fn run_external_command(
let name_tag = command.name_tag.clone(); let name_tag = command.name_tag.clone();
if let Ok(mut popen) = popen { if let Ok(mut popen) = popen {
popen.detach();
match stream_next { match stream_next {
StreamNext::Last => { StreamNext::Last => {
popen.detach(); let _ = popen.wait();
loop {
match popen.poll() {
None => {
std::thread::sleep(std::time::Duration::new(0, 100_000_000));
}
_ => {
let _ = popen.terminate();
break;
}
}
}
Ok(ClassifiedInputStream::new()) Ok(ClassifiedInputStream::new())
} }
StreamNext::External => { StreamNext::External => {
popen.detach();
let stdout = popen.stdout.take().unwrap(); let stdout = popen.stdout.take().unwrap();
Ok(ClassifiedInputStream::from_stdout(stdout)) Ok(ClassifiedInputStream::from_stdout(stdout))
} }
StreamNext::Internal => { StreamNext::Internal => {
popen.detach();
let stdout = popen.stdout.take().unwrap(); let stdout = popen.stdout.take().unwrap();
let file = futures::io::AllowStdIo::new(stdout); let file = futures::io::AllowStdIo::new(stdout);
let stream = Framed::new(file, LinesCodec {}); let stream = Framed::new(file, LinesCodec {});