+static bool respawn = false;
+
+static void
+handle_signal(int sig)
+{
+ rpc_session_freeze();
+ uloop_cancelled = true;
+ respawn = (sig == SIGHUP);
+}
+
+static void
+exec_self(int argc, char **argv)
+{
+ int i;
+ const char *cmd = rpc_exec_lookup(argv[0]);
+ char **args = calloc(argc + 1, sizeof(char *));
+
+ if (!cmd || !args)
+ return;
+
+ for (i = 0; i < argc; i++)
+ args[i] = argv[i];
+
+ setenv("RPC_HANGUP", "1", 1);
+ execv(cmd, (char * const *)args);
+}