diff --git a/vmm/sandbox/Cargo.lock b/vmm/sandbox/Cargo.lock index dc21f0ff..5a461b8d 100644 --- a/vmm/sandbox/Cargo.lock +++ b/vmm/sandbox/Cargo.lock @@ -426,7 +426,7 @@ dependencies = [ [[package]] name = "containerd-sandbox" version = "0.1.0" -source = "git+https://github.com/kuasar-io/rust-extensions.git#57a1d4b87050d32b76ec51bf1c99cfddd74558f1" +source = "git+https://github.com/kuasar-io/rust-extensions.git#e915494234c1586902f09f8d322dd2937e916144" dependencies = [ "anyhow", "async-stream", @@ -454,7 +454,7 @@ dependencies = [ [[package]] name = "containerd-shim" version = "0.3.0" -source = "git+https://github.com/kuasar-io/rust-extensions.git#57a1d4b87050d32b76ec51bf1c99cfddd74558f1" +source = "git+https://github.com/kuasar-io/rust-extensions.git#e915494234c1586902f09f8d322dd2937e916144" dependencies = [ "async-trait", "cgroups-rs 0.2.11", @@ -485,7 +485,7 @@ dependencies = [ [[package]] name = "containerd-shim-protos" version = "0.2.0" -source = "git+https://github.com/kuasar-io/rust-extensions.git#57a1d4b87050d32b76ec51bf1c99cfddd74558f1" +source = "git+https://github.com/kuasar-io/rust-extensions.git#e915494234c1586902f09f8d322dd2937e916144" dependencies = [ "async-trait", "protobuf 3.2.0", @@ -1561,7 +1561,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "059a34f111a9dee2ce1ac2826a68b24601c4298cfeb1a587c3cb493d5ab46f52" dependencies = [ "libc", - "nix 0.26.2", + "nix 0.20.0", ] [[package]] diff --git a/vmm/task/Cargo.lock b/vmm/task/Cargo.lock index 61ff1245..26d1c7cc 100644 --- a/vmm/task/Cargo.lock +++ b/vmm/task/Cargo.lock @@ -198,7 +198,7 @@ dependencies = [ [[package]] name = "containerd-sandbox" version = "0.1.0" -source = "git+https://github.com/kuasar-io/rust-extensions.git#6ae99540b754cd28c5389d5d6fdeff6ec7290ec5" +source = "git+https://github.com/kuasar-io/rust-extensions.git#e915494234c1586902f09f8d322dd2937e916144" dependencies = [ "anyhow", "async-stream", @@ -226,7 +226,7 @@ dependencies = [ [[package]] name = "containerd-shim" version = "0.3.0" -source = "git+https://github.com/kuasar-io/rust-extensions.git#6ae99540b754cd28c5389d5d6fdeff6ec7290ec5" +source = "git+https://github.com/kuasar-io/rust-extensions.git#e915494234c1586902f09f8d322dd2937e916144" dependencies = [ "async-trait", "cgroups-rs", @@ -257,7 +257,7 @@ dependencies = [ [[package]] name = "containerd-shim-protos" version = "0.2.0" -source = "git+https://github.com/kuasar-io/rust-extensions.git#6ae99540b754cd28c5389d5d6fdeff6ec7290ec5" +source = "git+https://github.com/kuasar-io/rust-extensions.git#e915494234c1586902f09f8d322dd2937e916144" dependencies = [ "async-trait", "protobuf 3.2.0", @@ -1532,7 +1532,7 @@ dependencies = [ [[package]] name = "runc" version = "0.2.0" -source = "git+https://github.com/kuasar-io/rust-extensions.git#6ae99540b754cd28c5389d5d6fdeff6ec7290ec5" +source = "git+https://github.com/kuasar-io/rust-extensions.git#e915494234c1586902f09f8d322dd2937e916144" dependencies = [ "async-trait", "futures", diff --git a/vmm/task/src/container.rs b/vmm/task/src/container.rs index 84791018..fc0d9e18 100644 --- a/vmm/task/src/container.rs +++ b/vmm/task/src/container.rs @@ -314,6 +314,7 @@ impl ProcessFactory for KuasarExecFactory { spec: p, exit_signal: Default::default(), }), + stdin: Arc::new(Mutex::new(None)), }) } } diff --git a/vmm/task/src/io.rs b/vmm/task/src/io.rs index e62be195..f943e8db 100644 --- a/vmm/task/src/io.rs +++ b/vmm/task/src/io.rs @@ -127,7 +127,7 @@ pub(crate) async fn copy_io_or_console

( ) -> Result<()> { if p.stdio.terminal { if let Some(console_socket) = socket { - let console_result = copy_console(&console_socket, &p.stdio, exit_signal).await; + let console_result = copy_console(p, &console_socket, &p.stdio, exit_signal).await; console_socket.clean().await; match console_result { Ok(c) => { @@ -144,7 +144,8 @@ pub(crate) async fn copy_io_or_console

( Ok(()) } -async fn copy_console( +async fn copy_console

( + p: &ProcessTemplate

, console_socket: &ConsoleSocket, stdio: &Stdio, exit_signal: Arc, @@ -155,6 +156,18 @@ async fn copy_console( let f = unsafe { File::from_raw_fd(fd) }; if !stdio.stdin.is_empty() { debug!("copy_console: pipe stdin to console"); + + let stdin_clone = stdio.stdin.clone(); + let stdin_w = p.stdin.clone(); + // open the write side to make sure read side unblock, as open write side + // will block too, open it in another thread + tokio::spawn(async move { + if let Ok(stdin_file) = OpenOptions::new().write(true).open(stdin_clone).await { + let mut lock_guard = stdin_w.lock().await; + *lock_guard = Some(stdin_file); + } + }); + let console_stdin = f .try_clone() .await