diff --git a/include/prototypes.h b/include/prototypes.h index 70836d55..8e41758a 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -48,7 +48,8 @@ extern void close_files(void); extern void panic(int sig); extern void shutdwn(int sig); -extern void start_server(int, char *); +extern void init_server(int); +extern void start_server(int); #if defined(_WIN32) extern void loc_NTTerm(void); #endif diff --git a/src/lib/gen/service.c b/src/lib/gen/service.c index 66353772..587715bc 100644 --- a/src/lib/gen/service.c +++ b/src/lib/gen/service.c @@ -237,6 +237,7 @@ service_main(DWORD argc, LPTSTR *argv) sprintf(tbuf, "%s/econfig", datadir); config_file = tbuf; } + emp_config(config_file); service_status.dwServiceType = SERVICE_WIN32; service_status.dwCurrentState = SERVICE_START_PENDING; @@ -255,7 +256,8 @@ service_main(DWORD argc, LPTSTR *argv) } /* Initialization code goes here. */ - start_server(0, config_file); + init_server(0); + start_server(0); /* Initialization complete - report running status. */ service_status.dwCurrentState = SERVICE_RUNNING; diff --git a/src/server/main.c b/src/server/main.c index 305fd507..b0faf1da 100644 --- a/src/server/main.c +++ b/src/server/main.c @@ -166,8 +166,6 @@ main(int argc, char **argv) } } - loginit("server"); - #if defined(_WIN32) if ((debug || datadir_set || config_file != NULL) && remove_service_set) { @@ -190,6 +188,15 @@ main(int argc, char **argv) printf("Can't use both -r or -R and -i or -I options\n"); exit(EXIT_FAILURE); } +#endif /* _WIN32 */ + + if (config_file == NULL) { + sprintf(tbuf, "%s/econfig", datadir); + config_file = tbuf; + } + emp_config(config_file); + +#if defined(_WIN32) if (install_service_set) return install_service(argv[0], service_name, datadir_set); if (remove_service_set) @@ -201,9 +208,6 @@ main(int argc, char **argv) config_file = tbuf; } - logerror("------------------------------------------------------"); - logerror("Empire server (pid %d) started", (int)getpid()); - #if defined(_WIN32) if (debug == 0) { SERVICE_TABLE_ENTRY DispatchTable[]={{"Empire Server", service_main},{NULL, NULL}}; @@ -217,13 +221,14 @@ main(int argc, char **argv) } else /* start in the foreground */ debug = 1; } -#else - if (debug == 0 && flags == 0) { - disassoc(); - } -#endif +#endif /* _WIN32 */ - start_server(flags, config_file); + init_server(flags); +#ifndef _WIN32 + if (debug == 0 && flags == 0) + disassoc(); +#endif + start_server(flags); #if defined(__linux__) && defined(_EMPTH_POSIX) strcpy(tbuf, argv[0]); @@ -247,7 +252,7 @@ main(int argc, char **argv) void -start_server(int flags, char *config_file) +init_server(int flags) { #ifdef POSIXSIGNALS struct sigaction act; @@ -256,7 +261,6 @@ start_server(int flags, char *config_file) #if defined(_WIN32) loc_NTInit(); #endif - emp_config(config_file); update_policy_check(); nullify_objects(); @@ -316,6 +320,14 @@ start_server(int flags, char *config_file) mobility_init(); } + loginit("server"); + logerror("------------------------------------------------------"); + logerror("Empire server (pid %d) started", (int)getpid()); +} + +void +start_server(int flags) +{ empth_create(PP_ACCEPT, player_accept, (50 * 1024), flags, "AcceptPlayers", "Accept network connections", 0); empth_create(PP_KILLIDLE, player_kill_idle, (50 * 1024), flags,