1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-26 10:04:02 +03:00

s3:nmbd: handle SIG_TERM and SIGHUP via tevent

metze
This commit is contained in:
Stefan Metzmacher 2009-01-22 16:17:23 +01:00
parent 2630d4a252
commit d361e332a8

View File

@ -85,6 +85,69 @@ static void terminate(void)
exit(0);
}
static void nmbd_sig_term_handler(struct tevent_context *ev,
struct tevent_signal *se,
int signum,
int count,
void *siginfo,
void *private_data)
{
terminate();
}
static bool nmbd_setup_sig_term_handler(void)
{
struct tevent_signal *se;
se = tevent_add_signal(nmbd_event_context(),
nmbd_event_context(),
SIGTERM, 0,
nmbd_sig_term_handler,
NULL);
if (!se) {
DEBUG(0,("failed to setup SIGTERM handler"));
return false;
}
return true;
}
static void msg_reload_nmbd_services(struct messaging_context *msg,
void *private_data,
uint32_t msg_type,
struct server_id server_id,
DATA_BLOB *data);
static void nmbd_sig_hup_handler(struct tevent_context *ev,
struct tevent_signal *se,
int signum,
int count,
void *siginfo,
void *private_data)
{
DEBUG(0,("Got SIGHUP dumping debug info.\n"));
msg_reload_nmbd_services(nmbd_messaging_context(),
NULL, MSG_SMB_CONF_UPDATED,
procid_self(), NULL);
}
static bool nmbd_setup_sig_hup_handler(void)
{
struct tevent_signal *se;
se = tevent_add_signal(nmbd_event_context(),
nmbd_event_context(),
SIGHUP, 0,
nmbd_sig_hup_handler,
NULL);
if (!se) {
DEBUG(0,("failed to setup SIGHUP handler"));
return false;
}
return true;
}
/**************************************************************************** **
Handle a SHUTDOWN message from smbcontrol.
**************************************************************************** */
@ -98,30 +161,6 @@ static void nmbd_terminate(struct messaging_context *msg,
terminate();
}
/**************************************************************************** **
Catch a SIGTERM signal.
**************************************************************************** */
static SIG_ATOMIC_T got_sig_term;
static void sig_term(int sig)
{
got_sig_term = 1;
sys_select_signal(SIGTERM);
}
/**************************************************************************** **
Catch a SIGHUP signal.
**************************************************************************** */
static SIG_ATOMIC_T reload_after_sighup;
static void sig_hup(int sig)
{
reload_after_sighup = 1;
sys_select_signal(SIGHUP);
}
/**************************************************************************** **
Possibly continue after a fault.
**************************************************************************** */
@ -451,15 +490,6 @@ static void process(void)
return;
}
/*
* Handle termination inband.
*/
if (got_sig_term) {
got_sig_term = 0;
terminate();
}
/*
* Process all incoming packets
* read above. This calls the success and
@ -629,19 +659,6 @@ static void process(void)
clear_unexpected(t);
/*
* Reload the services file if we got a sighup.
*/
if(reload_after_sighup) {
DEBUG( 0, ( "Got SIGHUP dumping debug info.\n" ) );
msg_reload_nmbd_services(nmbd_messaging_context(),
NULL, MSG_SMB_CONF_UPDATED,
procid_self(), NULL);
reload_after_sighup = 0;
}
/* check for new network interfaces */
reload_interfaces(t);
@ -807,10 +824,7 @@ static bool open_sockets(bool isdaemon, int port)
BlockSignals(False, SIGHUP);
BlockSignals(False, SIGUSR1);
BlockSignals(False, SIGTERM);
CatchSignal( SIGHUP, SIGNAL_CAST sig_hup );
CatchSignal( SIGTERM, SIGNAL_CAST sig_term );
#if defined(SIGFPE)
/* we are never interested in SIGFPE */
BlockSignals(True,SIGFPE);
@ -905,6 +919,11 @@ static bool open_sockets(bool isdaemon, int port)
exit(1);
}
if (!nmbd_setup_sig_term_handler())
exit(1);
if (!nmbd_setup_sig_hup_handler())
exit(1);
/* get broadcast messages */
claim_connection(NULL,"",FLAG_MSG_GENERAL|FLAG_MSG_DBWRAP);