SignalMonitor: add SignalMonitorGetEventLoop()
Eliminate the global variable "shutdown_loop".
This commit is contained in:
parent
bd5a70c712
commit
43863a70c8
@ -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);
|
||||||
|
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user