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

View File

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

View File

@ -40,6 +40,13 @@ SignalMonitorInit(EventLoop &loop);
void
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
* invoked in a safe context.