From 737da87244cbdeb1158c93944bcb5e10bb383b31 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Mon, 9 Aug 2021 10:56:21 -0300 Subject: [PATCH] fix(core): random shell command output order, closes #2184 (#2376) --- .changes/shell-command-output-order.md | 5 +++++ core/tauri/src/api/process/command.rs | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 .changes/shell-command-output-order.md diff --git a/.changes/shell-command-output-order.md b/.changes/shell-command-output-order.md new file mode 100644 index 000000000..b06ad0d0f --- /dev/null +++ b/.changes/shell-command-output-order.md @@ -0,0 +1,5 @@ +--- +"tauri": patch +--- + +Fixes a consistency issue on the order of `tauri::process::Command` emitted events. diff --git a/core/tauri/src/api/process/command.rs b/core/tauri/src/api/process/command.rs index 407b17943..0eb8b9e70 100644 --- a/core/tauri/src/api/process/command.rs +++ b/core/tauri/src/api/process/command.rs @@ -19,7 +19,7 @@ use std::os::windows::process::CommandExt; #[cfg(windows)] const CREATE_NO_WINDOW: u32 = 0x0800_0000; -use crate::async_runtime::{channel, spawn as spawn_task, Receiver}; +use crate::async_runtime::{block_on as block_on_task, channel, Receiver}; use os_pipe::{pipe, PipeWriter}; use serde::Serialize; use shared_child::SharedChild; @@ -248,7 +248,7 @@ impl Command { let reader = BufReader::new(stdout_reader); for line in reader.lines() { let tx_ = tx_.clone(); - spawn_task(async move { + block_on_task(async move { let _ = match line { Ok(line) => tx_.send(CommandEvent::Stdout(line)).await, Err(e) => tx_.send(CommandEvent::Error(e.to_string())).await, @@ -264,7 +264,7 @@ impl Command { let reader = BufReader::new(stderr_reader); for line in reader.lines() { let tx_ = tx_.clone(); - spawn_task(async move { + block_on_task(async move { let _ = match line { Ok(line) => tx_.send(CommandEvent::Stderr(line)).await, Err(e) => tx_.send(CommandEvent::Error(e.to_string())).await, @@ -278,7 +278,7 @@ impl Command { Ok(status) => { let _l = guard.write().unwrap(); commands().lock().unwrap().remove(&child_.id()); - spawn_task(async move { + let _ = block_on_task(async move { tx.send(CommandEvent::Terminated(TerminatedPayload { code: status.code(), #[cfg(windows)] @@ -291,7 +291,7 @@ impl Command { } Err(e) => { let _l = guard.write().unwrap(); - spawn_task(async move { tx.send(CommandEvent::Error(e.to_string())).await }); + let _ = block_on_task(async move { tx.send(CommandEvent::Error(e.to_string())).await }); } }; });