From 3f472fc7294cc92a11e6901c9b06d8390170f098 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 12 Mar 2005 16:28:28 +0000 Subject: [PATCH] (finish_server): New, factored out of termination code. Fixes two places in service_main() that lacked close_files(). (close_files, loc_NTTerm): Static linkage. --- include/prototypes.h | 5 +---- src/lib/gen/service.c | 11 ++++------- src/server/main.c | 42 +++++++++++++++++++++++++----------------- 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/include/prototypes.h b/include/prototypes.h index 2fd70b6b5..a3d1b848b 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -45,14 +45,11 @@ #include "commodity.h" /* src/server/main.c */ -extern void close_files(void); extern void panic(int sig); extern void shutdwn(int sig); extern void init_server(void); extern void start_server(int); -#if defined(_WIN32) -extern void loc_NTTerm(void); -#endif +extern void finish_server(void); /***************************************************************************** * src/lib/ * / *.c diff --git a/src/lib/gen/service.c b/src/lib/gen/service.c index e79bff2c5..96d95b25d 100644 --- a/src/lib/gen/service.c +++ b/src/lib/gen/service.c @@ -202,13 +202,13 @@ service_main(DWORD argc, LPTSTR *argv) if (service_status_handle == (SERVICE_STATUS_HANDLE)0) { logerror("RegisterServiceCtrlHandler failed %d\n", GetLastError()); - loc_NTTerm(); + finish_server() return; } if ((hShutdownEvent = CreateEvent(NULL, TRUE, FALSE, NULL)) == NULL) { logerror("CreateEvent for Shutdown failed %d\n", GetLastError()); - loc_NTTerm(); + finish_server() return; } @@ -225,11 +225,8 @@ service_main(DWORD argc, LPTSTR *argv) empth_exit(); - /* We should never get here. But, just in case... */ - close_files(); - - loc_NTTerm(); - return; + CANT_HAPPEN("main thread terminated"); + finish_server(); } void diff --git a/src/server/main.c b/src/server/main.c index a625708ed..c258d0631 100644 --- a/src/server/main.c +++ b/src/server/main.c @@ -68,9 +68,11 @@ static void nullify_objects(void); static void init_files(void); +static void close_files(void); #if defined(_WIN32) static void loc_NTInit(void); +static void loc_NTTerm(void); #endif static int mainpid = 0; @@ -218,7 +220,7 @@ main(int argc, char **argv) */ if (GetLastError() != ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) { logerror("Failed to dispatch service (%d)", GetLastError()); - loc_NTTerm(); + finish_server(); exit(EXIT_FAILURE); } } @@ -241,12 +243,8 @@ main(int argc, char **argv) empth_exit(); -/* We should never get here. But, just in case... */ - close_files(); - -#if defined(_WIN32) - loc_NTTerm(); -#endif + CANT_HAPPEN("main thread terminated"); + finish_server(); return EXIT_SUCCESS; } @@ -330,6 +328,18 @@ start_server(int flags) } } +/* + * Finish serving, release resources. + */ +void +finish_server(void) +{ + close_files(); +#if defined(_WIN32) + loc_NTTerm(); +#endif +} + static void init_files(void) { @@ -355,7 +365,7 @@ init_files(void) } } -void +static void close_files(void) { ef_close(EF_NATION); @@ -462,15 +472,13 @@ shutdwn(int sig) logerror("Server shutting down on signal %d", sig); else logerror("Server shutting down at Deity's request"); - close_files(); + finish_server(); #if defined(_WIN32) - loc_NTTerm(); - if (!daemonize) - _exit(0); -#else - _exit(0); + if (daemonize) + return; #endif + _exit(0); } @@ -541,7 +549,7 @@ nullify_objects(void) #if defined(_WIN32) static void -loc_NTInit() +loc_NTInit(void) { int rc; WORD wVersionRequested; @@ -555,8 +563,8 @@ loc_NTInit() } } -void -loc_NTTerm() +static void +loc_NTTerm(void) { WSACleanup(); } -- 2.43.0