SignalMonitor: add SignalMonitorGetEventLoop()

Eliminate the global variable "shutdown_loop".
This commit is contained in:
Max Kellermann 2013-10-18 08:44:40 +02:00
parent bd5a70c712
commit 43863a70c8
3 changed files with 16 additions and 6 deletions

View File

@ -25,9 +25,7 @@
#include "Log.hxx" #include "Log.hxx"
#include "LogInit.hxx" #include "LogInit.hxx"
#include "Main.hxx"
#include "event/Loop.hxx" #include "event/Loop.hxx"
#include "GlobalEvents.hxx"
#include "system/FatalError.hxx" #include "system/FatalError.hxx"
#include "util/Domain.hxx" #include "util/Domain.hxx"
@ -35,12 +33,10 @@
static constexpr Domain signal_handlers_domain("signal_handlers"); static constexpr Domain signal_handlers_domain("signal_handlers");
static EventLoop *shutdown_loop;
static void static void
HandleShutdownSignal() HandleShutdownSignal()
{ {
shutdown_loop->Break(); SignalMonitorGetEventLoop().Break();
} }
static void static void
@ -72,7 +68,6 @@ SignalHandlersInit(EventLoop &loop)
sa.sa_handler = SIG_IGN; sa.sa_handler = SIG_IGN;
x_sigaction(SIGPIPE, &sa); x_sigaction(SIGPIPE, &sa);
shutdown_loop = &loop;
SignalMonitorRegister(SIGINT, HandleShutdownSignal); SignalMonitorRegister(SIGINT, HandleShutdownSignal);
SignalMonitorRegister(SIGTERM, HandleShutdownSignal); SignalMonitorRegister(SIGTERM, HandleShutdownSignal);

View File

@ -63,6 +63,8 @@ public:
SocketMonitor::Steal(); SocketMonitor::Steal();
} }
using SocketMonitor::GetEventLoop;
#ifdef USE_SIGNALFD #ifdef USE_SIGNALFD
void Update(sigset_t &mask) { void Update(sigset_t &mask) {
const bool was_open = SocketMonitor::IsDefined(); const bool was_open = SocketMonitor::IsDefined();
@ -153,6 +155,12 @@ SignalMonitorFinish()
monitor.Destruct(); monitor.Destruct();
} }
EventLoop &
SignalMonitorGetEventLoop()
{
return monitor->GetEventLoop();
}
void void
SignalMonitorRegister(int signo, SignalHandler handler) SignalMonitorRegister(int signo, SignalHandler handler)
{ {

View File

@ -40,6 +40,13 @@ SignalMonitorInit(EventLoop &loop);
void void
SignalMonitorFinish(); SignalMonitorFinish();
/**
* Obtain a reference to the #EventLoop that was passed to
* SignalMonitorInit().
*/
EventLoop &
SignalMonitorGetEventLoop();
/** /**
* Register a handler for the specified signal. The handler will be * Register a handler for the specified signal. The handler will be
* invoked in a safe context. * invoked in a safe context.