static void sigexit();
void sighandler(int signum) {
+ putlog(LOGLEVEL_INFO, "Received Signal %d", signum);
signal(signum, SIG_DFL);
switch(signum) {
case SIGABRT:
static void sigcrash(int signum) {
char *coregen = "";
- #ifndef WIN32
- char gcore[50];
- sprintf(gcore, "gcore %u", getpid());
- system(gcore); //generate core file
- coregen = "core file generated.";
- #endif
char *signame;
switch(signum) {
case SIGSEGV:
signame = "SIGUNKNOWN";
break;
}
+ putlog(LOGLEVEL_ERROR, "NeonServ process crashed (%s)", signame);
+ #ifndef WIN32
+ char gcore[50];
+ sprintf(gcore, "gcore %u", getpid());
+ system(gcore); //generate core file
+ coregen = "core file generated.";
+ putlog(LOGLEVEL_ERROR | LOGLEVEL_INFO, "generated core file.");
+ #endif
char *alertchan = get_string_field("General.alertchan");
if(alertchan) {
struct ChanNode *channel = getChanByName(alertchan);
bot->flags &= SOCKET_FLAG_CONNECTED;
}
}
+ putlog(LOGLEVEL_INFO, "hard shutdown...");
+ exit_daemon();
sleep(1);
//hard restart
restart_process();
static void sigexit(int signum) {
cleanup();
+ exit_daemon();
+ exit(0);
}