mirror of
https://github.com/transmission/transmission.git
synced 2026-05-08 09:39:08 +01:00
daemon: use signalfd-based signal handling if available (#3778)
If signalfd(2) interface is available, prefer it over traditional signal handlers. This is mostly intended to drop dedicated signal handling thread and hook signal processing into libevent event loop in the most natural way. Signed-off-by: Dmitry Antipov <dantipov@cloudlinux.com> Signed-off-by: Dmitry Antipov <dantipov@cloudlinux.com>
This commit is contained in:
+5
-5
@@ -90,7 +90,7 @@ public:
|
||||
bool init(int argc, char* argv[], bool* foreground, int* ret);
|
||||
bool parseArgs(int argc, char const** argv, bool* dump_settings, bool* foreground, int* exit_code);
|
||||
bool reopenLogFile(char const* filename);
|
||||
int start(bool foreground);
|
||||
int start(bool (*setupsigfn)(void*), bool foreground);
|
||||
void periodicUpdate();
|
||||
void reportStatus();
|
||||
void reconfigure();
|
||||
@@ -731,7 +731,7 @@ void Daemon::stop(void)
|
||||
event_base_loopexit(ev_base_, nullptr);
|
||||
}
|
||||
|
||||
int Daemon::start(bool foreground)
|
||||
int Daemon::start(bool (*setupsigfn)(void*), bool foreground)
|
||||
{
|
||||
bool boolVal;
|
||||
bool pidfile_created = false;
|
||||
@@ -748,7 +748,7 @@ int Daemon::start(bool foreground)
|
||||
/* setup event state */
|
||||
ev_base_ = event_base_new();
|
||||
|
||||
if (ev_base_ == nullptr)
|
||||
if (ev_base_ == nullptr || (setupsigfn ? setupsigfn(ev_base_) : true) == false)
|
||||
{
|
||||
auto const error_code = errno;
|
||||
auto const errmsg = fmt::format(
|
||||
@@ -937,9 +937,9 @@ CLEANUP:
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int daemon_start(void* varg, bool foreground)
|
||||
static int daemon_start(void* varg, bool (*setupsigfn)(void*), bool foreground)
|
||||
{
|
||||
return static_cast<Daemon*>(varg)->start(foreground);
|
||||
return static_cast<Daemon*>(varg)->start(setupsigfn, foreground);
|
||||
}
|
||||
|
||||
bool Daemon::init(int argc, char* argv[], bool* foreground, int* ret)
|
||||
|
||||
Reference in New Issue
Block a user