X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/78e45b53a3904ce832e8a7e4654bc2efe9fb2c2c..2173bd49888d210eabcdbb0a7552789a5ad26507:/server/tripe.c diff --git a/server/tripe.c b/server/tripe.c index bf217b37..0252aa69 100644 --- a/server/tripe.c +++ b/server/tripe.c @@ -38,6 +38,7 @@ static sel_timer it; static unsigned iv_nreasons = 0; static struct timeval iv_next = { 0, 0 }; +static int lpdone = 0; /*----- The interval timer ------------------------------------------------*/ @@ -121,6 +122,17 @@ void lp_init(void) sig_init(&sel); } +/* --- @lp_end@ --- * + * + * Arguments: --- + * + * Returns: --- + * + * Use: Requests an exit from the main loop. + */ + +void lp_end(void) { lpdone = 1; } + /* --- @lp_run@ --- * * * Arguments: --- @@ -136,6 +148,7 @@ int lp_run(void) 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); @@ -146,6 +159,7 @@ int lp_run(void) } } } + lpdone = 0; return (0); } @@ -419,6 +433,10 @@ int main(int argc, char *argv[]) } lp_run(); + + p_destroyall(); + a_unlisten(); + ps_quit(); return (0); }