]>
jfr.im git - irc/quakenet/newserv.git/blob - core/main.c
1 #include "../lib/sstring.h"
2 #include "../lib/valgrind.h"
22 void siginthandler(int sig
);
23 void sigusr1handler(int sig
);
24 void sigsegvhandler(int sig
);
25 void sighuphandler(int sig
);
26 void handlecore(void);
27 void handlesignals(void);
29 int newserv_shutdown_pending
;
30 static int newserv_sigint_pending
, newserv_sigusr1_pending
, newserv_sighup_pending
;
31 static void (*oldsegv
)(int);
33 int main(int argc
, char **argv
) {
34 char *config
= "newserv.conf";
46 if (strcmp(argv
[1], "--help")==0) {
47 printf("Syntax: %s [config]\n", argv
[0]);
49 printf("Default configuration file unless specified: %s\n", config
);
59 /* Loading the modules will bring in the bulk of the code */
61 signal(SIGINT
, siginthandler
);
62 signal(SIGUSR1
, sigusr1handler
);
63 signal(SIGHUP
, sighuphandler
);
64 oldsegv
= signal(SIGSEGV
, sigsegvhandler
);
69 doscheduledevents(time(NULL
));
71 if (newserv_shutdown_pending
) {
87 if (RUNNING_ON_VALGRIND
) {
88 /* We've already manually called _fini for each of the modules. Make sure
89 * it's not getting called again when the libraries are unloaded. */
96 void handlesignals(void) {
97 if (newserv_sigusr1_pending
) {
98 signal(SIGUSR1
, sigusr1handler
);
99 Error("core", ERR_INFO
, "SIGUSR1 received.");
100 triggerhook(HOOK_CORE_SIGUSR1
, NULL
);
101 newserv_sigusr1_pending
=0;
104 if (newserv_sighup_pending
) {
105 signal(SIGHUP
, sighuphandler
);
106 Error("core", ERR_INFO
, "SIGHUP received, rehashing...");
107 triggerhook(HOOK_CORE_REHASH
, (void *)1);
108 newserv_sighup_pending
=0;
111 if (newserv_sigint_pending
) {
112 Error("core", ERR_INFO
, "SIGINT received, terminating.");
113 triggerhook(HOOK_CORE_SIGINT
, NULL
);
114 newserv_sigint_pending
=0;
115 newserv_shutdown_pending
=1;
120 * seed the pseudo-random number generator, rand()
125 gettimeofday(&t
, NULL
);
129 void siginthandler(int sig
) {
130 newserv_sigint_pending
= 1;
133 void sigusr1handler(int sig
) {
134 newserv_sigusr1_pending
= 1;
137 void sighuphandler(int sig
) {
138 newserv_sighup_pending
= 1;
141 void sigsegvhandler(int sig
) {