This replaces the rather abrupt `a_quit' function. Cleanup is handled
in `main', using the facilities added recently.
For now, there's a stub version of `lp_end' in `test.c', joining
`iv_...' from earlier.
-/* --- @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
/* --- @a_sigdie@ --- *
*
* Arguments: @int sig@ = signal number
break;
}
a_warn("SERVER", "quit", "signal", "%s", p, A_END);
break;
}
a_warn("SERVER", "quit", "signal", "%s", p, A_END);
}
/* --- @a_sighup@ --- *
}
/* --- @a_sighup@ --- *
{
a_warn("SERVER", "quit", "admin-request", A_END);
a_ok(a);
{
a_warn("SERVER", "quit", "admin-request", A_END);
a_ok(a);
}
static void acmd_version(admin *a, unsigned ac, char *av[])
}
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);
if (a->f & AF_FOREGROUND) {
T( trace(T_ADMIN, "admin: foreground client quit: shutting down"); )
a_warn("SERVER", "quit", "foreground-eof", A_END);
}
/* --- Abort any background jobs in progress --- */
}
/* --- Abort any background jobs in progress --- */
void iv_addreason(void) { ; }
void iv_rmreason(void) { ; }
void iv_addreason(void) { ; }
void iv_rmreason(void) { ; }
+void lp_end(void) { ; }
+
int main(int argc, char *argv[])
{
const char *kr = "keyring";
int main(int argc, char *argv[])
{
const char *kr = "keyring";
static unsigned iv_nreasons = 0;
static struct timeval iv_next = { 0, 0 };
static unsigned iv_nreasons = 0;
static struct timeval iv_next = { 0, 0 };
/*----- The interval timer ------------------------------------------------*/
/*----- The interval timer ------------------------------------------------*/
+/* --- @lp_end@ --- *
+ *
+ * Arguments: ---
+ *
+ * Returns: ---
+ *
+ * Use: Requests an exit from the main loop.
+ */
+
+void lp_end(void) { lpdone = 1; }
+
/* --- @lp_run@ --- *
*
* Arguments: ---
/* --- @lp_run@ --- *
*
* Arguments: ---
for (;;) {
a_preselect();
for (;;) {
a_preselect();
if (!sel_select(&sel)) nerr = 0;
else if (errno != EINTR && errno != EAGAIN) {
a_warn("SERVER", "select-error", "?ERRNO", A_END);
if (!sel_select(&sel)) nerr = 0;
else if (errno != EINTR && errno != EAGAIN) {
a_warn("SERVER", "select-error", "?ERRNO", A_END);
+
+ p_destroyall();
+ a_unlisten();
+ ps_quit();
extern void a_create(int /*fd_in*/, int /*fd_out*/, unsigned /*f*/);
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: ---
/* --- @a_preselect@ --- *
*
* Arguments: ---
extern void lp_init(void);
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: ---
/* --- @lp_run@ --- *
*
* Arguments: ---