(init_server, start_server): Move signal and thread initialization
from init_server() to start_server(), and service startup next to its Unix equivalent disassoc(). This way, threading is always initialized after daemonizing, which is simpler and more portable.
This commit is contained in:
parent
ba7d26b2ba
commit
d20fb6ba39
3 changed files with 33 additions and 34 deletions
|
@ -48,7 +48,7 @@
|
||||||
extern void close_files(void);
|
extern void close_files(void);
|
||||||
extern void panic(int sig);
|
extern void panic(int sig);
|
||||||
extern void shutdwn(int sig);
|
extern void shutdwn(int sig);
|
||||||
extern void init_server(int);
|
extern void init_server(void);
|
||||||
extern void start_server(int);
|
extern void start_server(int);
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
extern void loc_NTTerm(void);
|
extern void loc_NTTerm(void);
|
||||||
|
|
|
@ -203,7 +203,7 @@ service_ctrl_handler(DWORD Opcode)
|
||||||
void WINAPI
|
void WINAPI
|
||||||
service_main(DWORD argc, LPTSTR *argv)
|
service_main(DWORD argc, LPTSTR *argv)
|
||||||
{
|
{
|
||||||
init_server(0);
|
init_server();
|
||||||
|
|
||||||
service_status.dwServiceType = SERVICE_WIN32;
|
service_status.dwServiceType = SERVICE_WIN32;
|
||||||
service_status.dwCurrentState = SERVICE_START_PENDING;
|
service_status.dwCurrentState = SERVICE_START_PENDING;
|
||||||
|
|
|
@ -200,6 +200,8 @@ main(int argc, char **argv)
|
||||||
return install_service(argv[0], service_name, datadir_set, config_file);
|
return install_service(argv[0], service_name, datadir_set, config_file);
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
|
init_server();
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
if (daemonize != 0) {
|
if (daemonize != 0) {
|
||||||
SERVICE_TABLE_ENTRY DispatchTable[]={{"Empire Server", service_main},{NULL, NULL}};
|
SERVICE_TABLE_ENTRY DispatchTable[]={{"Empire Server", service_main},{NULL, NULL}};
|
||||||
|
@ -218,13 +220,10 @@ main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
daemonize = 0;
|
daemonize = 0;
|
||||||
#endif /* _WIN32 */
|
#else /* !_WIN32 */
|
||||||
|
|
||||||
init_server(flags);
|
|
||||||
#ifndef _WIN32
|
|
||||||
if (daemonize)
|
if (daemonize)
|
||||||
disassoc();
|
disassoc();
|
||||||
#endif
|
#endif /* !_WIN32 */
|
||||||
start_server(flags);
|
start_server(flags);
|
||||||
|
|
||||||
#if defined(__linux__) && defined(_EMPTH_POSIX)
|
#if defined(__linux__) && defined(_EMPTH_POSIX)
|
||||||
|
@ -249,18 +248,38 @@ main(int argc, char **argv)
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
init_server(int flags)
|
init_server(void)
|
||||||
{
|
{
|
||||||
#ifdef POSIXSIGNALS
|
srand(time(NULL));
|
||||||
struct sigaction act;
|
|
||||||
#endif /* POSIXSIGNALS */
|
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
loc_NTInit();
|
loc_NTInit();
|
||||||
#endif
|
#endif
|
||||||
update_policy_check();
|
update_policy_check();
|
||||||
|
|
||||||
nullify_objects();
|
nullify_objects();
|
||||||
|
global_init();
|
||||||
|
shutdown_init();
|
||||||
|
player_init();
|
||||||
|
ef_init();
|
||||||
|
init_files();
|
||||||
|
io_init();
|
||||||
|
init_nreport();
|
||||||
|
|
||||||
|
if (opt_MOB_ACCESS) {
|
||||||
|
/* This fixes up mobility upon restart */
|
||||||
|
mobility_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
loginit("server");
|
||||||
|
logerror("------------------------------------------------------");
|
||||||
|
logerror("Empire server (pid %d) started", (int)getpid());
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
start_server(int flags)
|
||||||
|
{
|
||||||
|
#ifdef POSIXSIGNALS
|
||||||
|
struct sigaction act;
|
||||||
|
#endif /* POSIXSIGNALS */
|
||||||
|
|
||||||
#if !defined(_WIN32)
|
#if !defined(_WIN32)
|
||||||
/* signal() should not be used with mit pthreads. Anyway if u
|
/* signal() should not be used with mit pthreads. Anyway if u
|
||||||
|
@ -302,29 +321,9 @@ init_server(int flags)
|
||||||
signal(SIGPIPE, SIG_IGN);
|
signal(SIGPIPE, SIG_IGN);
|
||||||
#endif /* POSIXSIGNALS */
|
#endif /* POSIXSIGNALS */
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
empth_init((char **)&player, flags);
|
empth_init((char **)&player, flags);
|
||||||
srand(time(NULL));
|
|
||||||
global_init();
|
|
||||||
shutdown_init();
|
|
||||||
player_init();
|
|
||||||
ef_init();
|
|
||||||
init_files();
|
|
||||||
io_init();
|
|
||||||
init_nreport();
|
|
||||||
|
|
||||||
if (opt_MOB_ACCESS) {
|
|
||||||
/* This fixes up mobility upon restart */
|
|
||||||
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,
|
empth_create(PP_ACCEPT, player_accept, (50 * 1024), flags,
|
||||||
"AcceptPlayers", "Accept network connections", 0);
|
"AcceptPlayers", "Accept network connections", 0);
|
||||||
empth_create(PP_KILLIDLE, player_kill_idle, (50 * 1024), flags,
|
empth_create(PP_KILLIDLE, player_kill_idle, (50 * 1024), flags,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue