va_end(ap);
}
-/* --- @a_quit@ --- *
- *
- * Arguments: ---
- *
- * Returns: ---
- *
- * Use: Shuts things down nicely.
- */
-
-void a_quit(void)
-{
- a_unlisten();
- p_destroyall();
- ps_quit();
- exit(0);
-}
-
/* --- @a_sigdie@ --- *
*
* Arguments: @int sig@ = signal number
break;
}
a_warn("SERVER", "quit", "signal", "%s", p, A_END);
- a_quit();
+ lp_end();
}
/* --- @a_sighup@ --- *
{
a_warn("SERVER", "quit", "admin-request", A_END);
a_ok(a);
- a_quit();
+ lp_end();
}
static void acmd_version(admin *a, unsigned ac, char *av[])
if (a->f & AF_FOREGROUND) {
T( trace(T_ADMIN, "admin: foreground client quit: shutting down"); )
a_warn("SERVER", "quit", "foreground-eof", A_END);
- a_quit();
+ lp_end();
}
/* --- Abort any background jobs in progress --- */
void iv_addreason(void) { ; }
void iv_rmreason(void) { ; }
+void lp_end(void) { ; }
+
int main(int argc, char *argv[])
{
const char *kr = "keyring";
static unsigned iv_nreasons = 0;
static struct timeval iv_next = { 0, 0 };
+static int lpdone = 0;
/*----- The interval timer ------------------------------------------------*/
sig_init(&sel);
}
+/* --- @lp_end@ --- *
+ *
+ * Arguments: ---
+ *
+ * Returns: ---
+ *
+ * Use: Requests an exit from the main loop.
+ */
+
+void lp_end(void) { lpdone = 1; }
+
/* --- @lp_run@ --- *
*
* Arguments: ---
for (;;) {
a_preselect();
+ if (lpdone) break;
if (!sel_select(&sel)) nerr = 0;
else if (errno != EINTR && errno != EAGAIN) {
a_warn("SERVER", "select-error", "?ERRNO", A_END);
}
}
}
+ lpdone = 0;
return (0);
}
}
lp_run();
+
+ p_destroyall();
+ a_unlisten();
+ ps_quit();
return (0);
}
extern void a_create(int /*fd_in*/, int /*fd_out*/, unsigned /*f*/);
-/* --- @a_quit@ --- *
- *
- * Arguments: ---
- *
- * Returns: ---
- *
- * Use: Shuts things down nicely.
- */
-
-extern void a_quit(void);
-
/* --- @a_preselect@ --- *
*
* Arguments: ---
extern void lp_init(void);
+/* --- @lp_end@ --- *
+ *
+ * Arguments: ---
+ *
+ * Returns: ---
+ *
+ * Use: Requests an exit from the main loop.
+ */
+
+extern void lp_end(void);
+
/* --- @lp_run@ --- *
*
* Arguments: ---