Moving some m_die code into ircd_shutdown(reason) function and use it on SIGTERM too

This commit is contained in:
Valery Yatsko 2008-04-20 07:38:56 +04:00
parent a822ef295a
commit 6972e25a95
4 changed files with 32 additions and 33 deletions

View File

@ -107,4 +107,6 @@ extern int ssl_ok;
extern int zlib_ok; extern int zlib_ok;
extern int maxconnections; extern int maxconnections;
void ircd_shutdown(const char *reason);
#endif #endif

View File

@ -74,33 +74,7 @@ mo_die(struct Client *client_p __unused, struct Client *source_p, int parc, cons
return 0; return 0;
} }
RB_DLINK_FOREACH(ptr, lclient_list.head) ircd_shutdown(get_client_name(source_p, HIDE_IP));
{
target_p = ptr->data;
sendto_one_notice(target_p, ":Server Terminating. %s", get_client_name(source_p, HIDE_IP));
}
RB_DLINK_FOREACH(ptr, serv_list.head)
{
target_p = ptr->data;
sendto_one(target_p, "SQUIT %s :Terminated by %s",
use_id(target_p),
get_client_name(source_p, HIDE_IP));
}
/*
* XXX we called flush_connections() here. Read server_reboot()
* for an explanation as to what we should do.
* -- adrian
*/
ilog(L_MAIN, "Server terminated by %s", get_oper_name(source_p));
/* this is a normal exit, tell the os it's ok */
unlink(pidFileName);
exit(0);
/* NOT REACHED */
return 0; return 0;
} }

View File

@ -141,6 +141,34 @@ rb_bh *linebuf_heap;
rb_bh *dnode_heap; rb_bh *dnode_heap;
void
ircd_shutdown(const char *reason)
{
struct Client *target_p;
rb_dlink_node *ptr;
RB_DLINK_FOREACH(ptr, lclient_list.head)
{
target_p = ptr->data;
sendto_one(target_p, ":%s NOTICE %s :Server Terminating. %s",
me.name, target_p->name, reason);
}
RB_DLINK_FOREACH(ptr, serv_list.head)
{
target_p = ptr->data;
sendto_one(target_p, ":%s ERROR :Terminated by %s",
me.name, reason);
}
ilog(L_MAIN, "Server Terminating. %s", reason);
unlink(pidFileName);
exit(0);
}
/* /*
* print_startup - print startup information * print_startup - print startup information
*/ */

View File

@ -57,12 +57,7 @@ sigchld_handler(int sig)
static void static void
sigterm_handler(int sig) sigterm_handler(int sig)
{ {
/* XXX we had a flush_connections() here - we should close all the ircd_shutdown("Received SIGTERM");
* connections and flush data. read server_reboot() for my explanation.
* -- adrian
*/
ilog(L_MAIN, "Server killed By SIGTERM");
exit(-1);
} }
/* /*