|
@@ -70,7 +70,6 @@ static void dumpmemusage(int severity);
|
|
|
static void dumpstats(int severity); /* log stats */
|
|
|
static void conn_read_callback(int fd, short event, void *_conn);
|
|
|
static void conn_write_callback(int fd, short event, void *_conn);
|
|
|
-static void signal_callback(int fd, short events, void *arg);
|
|
|
static void second_elapsed_callback(periodic_timer_t *timer, void *args);
|
|
|
static int conn_close_if_marked(int i);
|
|
|
static void connection_start_reading_from_linked_conn(connection_t *conn);
|
|
@@ -1805,46 +1804,6 @@ do_main_loop(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/** Used to implement the SIGNAL control command: if we accept
|
|
|
- * <b>the_signal</b> as a remote pseudo-signal, act on it. */
|
|
|
-/* We don't re-use catch() here because:
|
|
|
- * 1. We handle a different set of signals than those allowed in catch.
|
|
|
- * 2. Platforms without signal() are unlikely to define SIGfoo.
|
|
|
- * 3. The control spec is defined to use fixed numeric signal values
|
|
|
- * which just happen to match the Unix values.
|
|
|
- */
|
|
|
-void
|
|
|
-control_signal_act(int the_signal)
|
|
|
-{
|
|
|
- switch (the_signal)
|
|
|
- {
|
|
|
- case 1:
|
|
|
- signal_callback(0,0,(void*)(uintptr_t)SIGHUP);
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- signal_callback(0,0,(void*)(uintptr_t)SIGINT);
|
|
|
- break;
|
|
|
- case 10:
|
|
|
- signal_callback(0,0,(void*)(uintptr_t)SIGUSR1);
|
|
|
- break;
|
|
|
- case 12:
|
|
|
- signal_callback(0,0,(void*)(uintptr_t)SIGUSR2);
|
|
|
- break;
|
|
|
- case 15:
|
|
|
- signal_callback(0,0,(void*)(uintptr_t)SIGTERM);
|
|
|
- break;
|
|
|
- case SIGNEWNYM:
|
|
|
- signal_callback(0,0,(void*)(uintptr_t)SIGNEWNYM);
|
|
|
- break;
|
|
|
- case SIGCLEARDNSCACHE:
|
|
|
- signal_callback(0,0,(void*)(uintptr_t)SIGCLEARDNSCACHE);
|
|
|
- break;
|
|
|
- default:
|
|
|
- log_warn(LD_BUG, "Unrecognized signal number %d.", the_signal);
|
|
|
- break;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/** Libevent callback: invoked when we get a signal.
|
|
|
*/
|
|
|
static void
|
|
@@ -1853,6 +1812,14 @@ signal_callback(int fd, short events, void *arg)
|
|
|
uintptr_t sig = (uintptr_t)arg;
|
|
|
(void)fd;
|
|
|
(void)events;
|
|
|
+
|
|
|
+ process_signal(sig);
|
|
|
+}
|
|
|
+
|
|
|
+/** Do the work of acting on a signal received in <b>sig</b> */
|
|
|
+void
|
|
|
+process_signal(uintptr_t sig)
|
|
|
+{
|
|
|
switch (sig)
|
|
|
{
|
|
|
case SIGTERM:
|