static int signalpipe[2];
-static void Signal_Block(int sig)
+
+#ifdef DEBUG
+
+static void
+Dump_State(void)
+{
+ Log(LOG_DEBUG, "--- Internal server state: %s ---",
+ Client_ID(Client_ThisServer()));
+ Log(LOG_DEBUG, "time()=%ld", time(NULL));
+ Conf_DebugDump();
+ Conn_DebugDump();
+ Client_DebugDump();
+ Log(LOG_DEBUG, "--- End of state dump ---");
+} /* Dump_State */
+
+#endif
+
+
+static void
+Signal_Block(int sig)
{
#ifdef HAVE_SIGPROCMASK
sigset_t set;
sigaddset(&set, sig);
sigprocmask(SIG_BLOCK, &set, NULL);
+#else
+ sigblock(sig);
#endif
}
-static void Signal_Unblock(int sig)
+static void
+Signal_Unblock(int sig)
{
#ifdef HAVE_SIGPROCMASK
sigset_t set;
sigaddset(&set, sig);
sigprocmask(SIG_UNBLOCK, &set, NULL);
+#else
+ int old = sigblock(0) & ~sig;
+ sigsetmask(old);
#endif
}
* It blocks the signal and queues it for later execution by Signal_Handler_BH.
* @param Signal Number of the signal to handle.
*/
-static void Signal_Handler(int Signal)
+static void
+Signal_Handler(int Signal)
{
switch (Signal) {
case SIGTERM:
while (waitpid( -1, NULL, WNOHANG) > 0)
;
return;
+#ifdef DEBUG
+ case SIGUSR1:
+ if (! NGIRCd_Debug) {
+ Log(LOG_INFO|LOG_snotice,
+ "Got SIGUSR1, debug mode activated.");
+#ifdef SNIFFER
+ strcpy(NGIRCd_DebugLevel, "2");
+ NGIRCd_Debug = true;
+ NGIRCd_Sniffer = true;
+#else
+ strcpy(NGIRCd_DebugLevel, "1");
+ NGIRCd_Debug = true;
+#endif /* SNIFFER */
+ } else {
+ Log(LOG_INFO|LOG_snotice,
+ "Got SIGUSR1, debug mode deactivated.");
+ strcpy(NGIRCd_DebugLevel, "");
+ NGIRCd_Debug = false;
+#ifdef SNIFFER
+ NGIRCd_Sniffer = false;
+#endif /* SNIFFER */
+ }
+ return;
+#endif
}
/*
* thus its not necessary to only use functions that are signal safe.
* @param Signal Number of the signal that was queued.
*/
-static void Signal_Handler_BH(int Signal)
+static void
+Signal_Handler_BH(int Signal)
{
switch (Signal) {
case SIGHUP:
NGIRCd_Rehash();
break;
#ifdef DEBUG
+ case SIGUSR2:
+ if (NGIRCd_Debug)
+ Dump_State();
+ break;
default:
Log(LOG_DEBUG, "Got signal %d! Ignored.", Signal);
#endif
Signal_Unblock(Signal);
}
-static void Sig_callback(int fd, short UNUSED what)
+
+static void
+Signal_Callback(int fd, short UNUSED what)
{
int sig, ret;
(void) what;
* those signals we are interested in and sets SIGPIPE to be ignored.
* @return true if initialization was sucessful.
*/
-bool Signals_Init(void)
+bool
+Signals_Init(void)
{
size_t i;
#ifdef HAVE_SIGACTION
signal(SIGPIPE, SIG_IGN);
#endif
- return io_event_create(signalpipe[0], IO_WANTREAD,
- Sig_callback);
-} /* Initialize_Signal_Handler */
+ return io_event_create(signalpipe[0], IO_WANTREAD, Signal_Callback);
+} /* Signals_Init */
/**
* child prodcess, especially when we are about to call
* 3rd party code (e.g. PAM).
*/
-void Signals_Exit(void)
+void
+Signals_Exit(void)
{
size_t i;
#ifdef HAVE_SIGACTION