Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions lib/xcp_service.ml
Original file line number Diff line number Diff line change
Expand Up @@ -540,7 +540,7 @@ let pidfile_write filename =

(* Cf Stevens et al, Advanced Programming in the UNIX Environment,
Section 13.3 *)
let daemonize () =
let daemonize ?start_fn () =
if not (have_daemonized ())
then
ign_int (Unix.umask 0);
Expand All @@ -550,6 +550,7 @@ let daemonize () =
Sys.set_signal Sys.sighup Sys.Signal_ignore;
(match Unix.fork () with
| 0 ->
Opt.iter (fun fn -> fn ()) start_fn;
Unix.chdir "/";
mkdir_rec (Filename.dirname !pidfile) 0o755;
pidfile_write !pidfile;
Expand All @@ -560,10 +561,14 @@ let daemonize () =
assert (nullfd = Unix.stdin);
let (_:Unix.file_descr) = Unix.dup nullfd in ();
let (_:Unix.file_descr) = Unix.dup nullfd in ();
| _ -> exit 0)
| _ -> exit 0)
| _ -> exit 0

let maybe_daemonize () = if !daemon then daemonize ()
let maybe_daemonize ?start_fn () =
if !daemon then
daemonize ?start_fn ()
else
Opt.iter (fun fn -> fn ()) start_fn

let wait_forever () =
while true do
Expand Down
4 changes: 2 additions & 2 deletions lib/xcp_service.mli
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,6 @@ val serve_forever: server -> unit
val daemon: bool ref
val loglevel: unit -> Syslog.level

val daemonize: unit -> unit
val daemonize: ?start_fn:(unit -> unit) -> unit -> unit

val maybe_daemonize: unit -> unit
val maybe_daemonize: ?start_fn:(unit -> unit) -> unit -> unit