alacritty

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 32cb48774ad139c7f4fe9864e28fefeaa1009c79
parent c6ab2a8867ad0d064d67dc5e32138cbb3d3ab833
Author: Christian Duerr <chrisduerr@users.noreply.github.com>
Date:   Thu, 21 Mar 2019 19:55:19 +0000

Remove deprecated libc::daemon call

Since version 10.5 of macOS the libc::daemon call has been deprecated.
While it is recommended by macOS to use launchd instead, this is not
easily available on other unix platforms.

However since we just spawn a daemon process to prevent Alacritty from
spawning zombies, we can manually invoke `fork` in the child process to
cause a double-fork and re-parent the child process under init so it can
be reaped automatically.

Since the daemon call is not part of POSIX, using the double fork on all
unix platforms also has some portability advantages.
Diffstat:
Msrc/util.rs | 10+++++++---
1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/util.rs b/src/util.rs @@ -15,6 +15,7 @@ use std::{cmp, io}; use std::ffi::OsStr; use std::process::Command; +use std::process::Stdio; #[cfg(not(windows))] use std::os::unix::process::CommandExt; @@ -22,8 +23,6 @@ use std::os::unix::process::CommandExt; #[cfg(windows)] use std::os::windows::process::CommandExt; #[cfg(windows)] -use std::process::Stdio; -#[cfg(windows)] use winapi::um::winbase::{CREATE_NEW_PROCESS_GROUP, CREATE_NO_WINDOW}; /// Threading utilities @@ -94,8 +93,13 @@ pub fn start_daemon<I, S>(program: &str, args: I) -> io::Result<()> { Command::new(program) .args(args) + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) .before_exec(|| unsafe { - ::libc::daemon(1, 0); + if ::libc::fork() != 0 { + std::process::exit(0); + } Ok(()) }) .spawn()?