summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Duerr <chrisduerr@users.noreply.github.com>2019-03-21 19:55:19 +0000
committerGitHub <noreply@github.com>2019-03-21 19:55:19 +0000
commit32cb48774ad139c7f4fe9864e28fefeaa1009c79 (patch)
treea70f4f02ff48e90b12125bdec7d854e46d27b8c8
parentc6ab2a8867ad0d064d67dc5e32138cbb3d3ab833 (diff)
downloadalacritty-32cb48774ad139c7f4fe9864e28fefeaa1009c79.tar.gz
alacritty-32cb48774ad139c7f4fe9864e28fefeaa1009c79.zip
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.
-rw-r--r--src/util.rs10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/util.rs b/src/util.rs
index b7a05041..4532d2e4 100644
--- 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()?