X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Ftools%2Fsysdbd%2Fmain.c;h=7dc9f26ba4b33bff7ab41a67996bedb34aa1a824;hb=d5819c800a3122fc2f3b0124f97e0309680d4e2c;hp=4a4d55ec0ec9eb6e57abb7dcd501be923c0f8c86;hpb=c19016cd990659ef8a99373f3d0debde80952094;p=sysdb.git diff --git a/src/tools/sysdbd/main.c b/src/tools/sysdbd/main.c index 4a4d55e..7dc9f26 100644 --- a/src/tools/sysdbd/main.c +++ b/src/tools/sysdbd/main.c @@ -217,7 +217,6 @@ do_reconfigure(void) return status; sdb_plugin_init_all(); sdb_plugin_reconfigure_finish(); - sdb_connection_enable_logging(); return 0; } /* do_reconfigure */ @@ -232,8 +231,11 @@ backend_handler(void __attribute__((unused)) *data) static int main_loop(void) { + sdb_fe_socket_t *sock = sdb_fe_sock_create(); pthread_t backend_thread; + int status = 0; + while (42) { size_t i; @@ -251,14 +253,25 @@ main_loop(void) break; } - sdb_fe_socket_t *sock = sdb_fe_sock_create(); - for (i = 0; i < listen_addresses_num; ++i) - if (sdb_fe_sock_add_listener(sock, listen_addresses[i])) + for (i = 0; i < listen_addresses_num; ++i) { + if (sdb_fe_sock_add_listener(sock, listen_addresses[i])) { + status = 1; break; + } + } /* break on error */ - if (i >= listen_addresses_num) - sdb_fe_sock_listen_and_serve(sock, &frontend_main_loop); + if (i < listen_addresses_num) { + status = 1; + break; + } + + sdb_log(SDB_LOG_INFO, "SysDB daemon "SDB_VERSION_STRING + SDB_VERSION_EXTRA " (pid %i) initialized successfully", + (int)getpid()); + + sdb_connection_enable_logging(); + sdb_fe_sock_listen_and_serve(sock, &frontend_main_loop); sdb_log(SDB_LOG_INFO, "Waiting for backend thread to terminate"); plugin_main_loop.do_loop = 0; @@ -266,18 +279,25 @@ main_loop(void) * and make the thread shut down faster */ pthread_kill(backend_thread, SIGINT); pthread_join(backend_thread, NULL); - sdb_fe_sock_destroy(sock); if (! reconfigure) break; reconfigure = 0; + sdb_fe_sock_clear_listeners(sock); if (do_reconfigure()) { sdb_log(SDB_LOG_ERR, "Reconfiguration failed"); + status = 1; break; } } - return 0; + + /* clean up in case we exited the loop on error */ + pthread_kill(backend_thread, SIGINT); + pthread_join(backend_thread, NULL); + + sdb_fe_sock_destroy(sock); + return status; } /* main_loop */ int @@ -345,10 +365,6 @@ main(int argc, char **argv) if (daemonize()) exit(1); - sdb_log(SDB_LOG_INFO, "SysDB daemon "SDB_VERSION_STRING - SDB_VERSION_EXTRA " (pid %i) initialized successfully", - (int)getpid()); - sdb_plugin_init_all(); plugin_main_loop.default_interval = SECS_TO_SDB_TIME(60); @@ -367,11 +383,11 @@ main(int argc, char **argv) * closing the connection cleanly */ signal(SIGPIPE, SIG_IGN); - sdb_connection_enable_logging(); status = main_loop(); sdb_log(SDB_LOG_INFO, "Shutting down SysDB daemon "SDB_VERSION_STRING SDB_VERSION_EXTRA" (pid %i)", (int)getpid()); + sdb_plugin_shutdown_all(); return status; } /* main */