summaryrefslogtreecommitdiff
path: root/src/main.mlton.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2019-08-30 17:15:48 -0400
committerGravatar Adam Chlipala <adam@chlipala.net>2019-08-30 17:15:48 -0400
commitf54687e989372470c2848890e9499feb9fd70352 (patch)
tree2914a419c1ef501a0fbea0d57a338d9d68607da8 /src/main.mlton.sml
parent0d644b4350f3e6cbb676360b0fc6a9e448137092 (diff)
urweb daemon restart
Diffstat (limited to 'src/main.mlton.sml')
-rw-r--r--src/main.mlton.sml15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/main.mlton.sml b/src/main.mlton.sml
index e9317d46..a6eaa7ea 100644
--- a/src/main.mlton.sml
+++ b/src/main.mlton.sml
@@ -107,6 +107,8 @@ fun usage flag_info =
(* Encapsulate main invocation handler in a function, possibly to be called multiple times within a daemon. *)
+exception DaemonExit
+
fun oneRun args =
let
val timing = ref false
@@ -256,7 +258,7 @@ fun oneRun args =
val () = case args of
["daemon", "stop"] => (OS.FileSys.remove socket handle OS.SysErr _ => ();
- OS.Process.exit OS.Process.success)
+ raise DaemonExit)
| _ => ()
val sources = parse_flags (flag_info ()) args
@@ -360,7 +362,7 @@ fun startDaemon () =
OS.Process.exit OS.Process.success)
| _ =>
let
- val success = (oneRun (rev args))
+ val success = (oneRun (rev args) handle DaemonExit => OS.Process.exit OS.Process.success)
handle ex => (print "unhandled exception:\n";
print (General.exnMessage ex ^ "\n");
OS.Process.failure)
@@ -445,9 +447,12 @@ fun oneCommandLine args =
else
(OS.FileSys.remove socket;
raise OS.SysErr ("", NONE))
- end handle OS.SysErr _ => oneRun args
+ end handle OS.SysErr _ => oneRun args handle DaemonExit => OS.Process.success
val () = (Globals.setResetTime ();
case CommandLine.arguments () of
- ["daemon", "start"] => startDaemon ()
- | args => OS.Process.exit (oneCommandLine args))
+ ["daemon", "start"] => startDaemon ()
+ | ["daemon", "restart"] =>
+ (ignore (oneCommandLine ["daemon", "stop"]);
+ startDaemon ())
+ | args => OS.Process.exit (oneCommandLine args))