diff -r 6f298b6e0d5f -r a9a4c5e6aa30 src/nexus.c --- a/src/nexus.c Mon Mar 16 22:06:39 2009 +0200 +++ b/src/nexus.c Mon Mar 16 23:34:05 2009 +0200 @@ -261,33 +261,23 @@ (void) sig; (void) what; - if (ctx->client && !ctx->client->quitting) { - log_info("Quitting..."); - - // quit it - irc_client_quit(ctx->client, "Goodbye, cruel world ;("); + log_info("Quitting..."); - } else { - log_error("Aborting"); - - // die - if (ctx->client) { - irc_client_destroy(ctx->client); - ctx->client = NULL; - } + // unload the modules + modules_unload(ctx->modules); - // exit - event_base_loopexit(ctx->ev_base, NULL); - } + // quit the irc client + irc_client_quit(ctx->client, "Goodbye, cruel world ;("); + + // remove the signal handlers (ourself) + signals_free(ctx->signals); } int main (int argc, char **argv) { - struct signals *signals; + struct nexus _nexus, *nexus = &_nexus; struct error_info err; - struct nexus _nexus, *nexus = &_nexus; - // zero nexus memset(nexus, 0, sizeof(*nexus)); @@ -296,13 +286,13 @@ FATAL("event_base_new"); // initialize signal handlers - if ((ERROR_CODE(&err) = signals_create(&signals, nexus->ev_base))) + if ((ERROR_CODE(&err) = signals_create(&nexus->signals, nexus->ev_base))) FATAL("signals_create"); // add our signal handlers if ( - (ERROR_CODE(&err) = signals_add(signals, SIGPIPE, &signals_ignore, signals)) - || (ERROR_CODE(&err) = signals_add(signals, SIGINT, &on_sigint, nexus)) + (ERROR_CODE(&err) = signals_add(nexus->signals, SIGPIPE, &signals_ignore, nexus->signals)) + || (ERROR_CODE(&err) = signals_add(nexus->signals, SIGINT, &on_sigint, nexus)) ) FATAL_ERROR(&err, "signals_add");