mirror of
https://git.proxmox.com/git/proxmox-backup
synced 2025-10-04 13:57:45 +00:00
client: mount: wait for child to return before exiting
When using the `proxmox-backup-client mount` command, the parent sometimes exits before we can print any error message. Most notably this happens when no PBS_REPOSITORY is passed, as this is the first option checked. If the underlying file descriptor has been closed, wait for the client to complete and return the error message. Reported-by: Friedrich Weber <f.weber@proxmox.com> Suggested-by: Christian Ebner <c.ebner@proxmox.com> Signed-off-by: Gabriel Goller <g.goller@proxmox.com> Tested-by: Friedrich Weber <f.weber@proxmox.com>
This commit is contained in:
parent
a08698d32a
commit
a981ddbc77
@ -183,7 +183,17 @@ fn mount(
|
||||
Ok(ForkResult::Parent { .. }) => {
|
||||
drop(pw);
|
||||
// Blocks the parent process until we are ready to go in the child
|
||||
let _res = nix::unistd::read(pr.as_raw_fd(), &mut [0]).unwrap();
|
||||
let mut buffer = [0u8];
|
||||
nix::unistd::read(pr.as_raw_fd(), &mut buffer).unwrap();
|
||||
|
||||
// Read buffer didn't change, which indicates that nothing has been read and the file
|
||||
// descriptor has probably been closed. This means that there was an error in the child
|
||||
// process and it did not daemonize correctly.
|
||||
if buffer[0] == 0 {
|
||||
// Wait for the child process to finish, so it can return a nice error.
|
||||
nix::sys::wait::wait().unwrap();
|
||||
}
|
||||
|
||||
Ok(Value::Null)
|
||||
}
|
||||
Ok(ForkResult::Child) => {
|
||||
@ -264,7 +274,7 @@ async fn mount_do(param: Value, pipe: Option<OwnedFd>) -> Result<Value, Error> {
|
||||
}
|
||||
// Signal the parent process that we are done with the setup and it can
|
||||
// terminate.
|
||||
nix::unistd::write(pipe.as_raw_fd(), &[0u8])?;
|
||||
nix::unistd::write(pipe.as_raw_fd(), &[1u8])?;
|
||||
let _: OwnedFd = pipe;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user