From e9e7cf5ee7d8894853244982ddd172956eb1ce42 Mon Sep 17 00:00:00 2001 From: Simo Piiroinen Date: Tue, 2 May 2017 19:13:44 +0300 Subject: [PATCH] [sensord] Use systemd notify instead of forking a daemon. Fixes JB#36189 Using systemd specific startup notification is preferable over cusrom daemon forks. Add support for systemd-notify and use it instead of forking. Signed-off-by: Simo Piiroinen --- rpm/sensorfw-qt5.spec | 1 + rpm/sensorfwd.service | 4 ++-- sensord/main.cpp | 8 ++++++++ sensord/parser.cpp | 10 +++++++++- sensord/parser.h | 2 ++ sensord/sensord.pro | 2 ++ 6 files changed, 24 insertions(+), 3 deletions(-) diff --git a/rpm/sensorfw-qt5.spec b/rpm/sensorfw-qt5.spec index 218cac9f..c365f947 100644 --- a/rpm/sensorfw-qt5.spec +++ b/rpm/sensorfw-qt5.spec @@ -20,6 +20,7 @@ BuildRequires: pkgconfig(Qt5DBus) BuildRequires: pkgconfig(Qt5Network) BuildRequires: pkgconfig(Qt5Test) BuildRequires: pkgconfig(mlite5) +BuildRequires: pkgconfig(libsystemd) BuildRequires: doxygen BuildRequires: systemd BuildRequires: libudev-devel diff --git a/rpm/sensorfwd.service b/rpm/sensorfwd.service index c053050b..b4da9885 100644 --- a/rpm/sensorfwd.service +++ b/rpm/sensorfwd.service @@ -5,8 +5,8 @@ Requires=dbus.service Conflicts=actdead.target [Service] -Type=forking -ExecStart=/usr/sbin/sensorfwd -c=/etc/sensorfw/primaryuse.conf -d --log-level=warning --no-magnetometer-bg-calibration +Type=notify +ExecStart=/usr/sbin/sensorfwd -c=/etc/sensorfw/primaryuse.conf --systemd --log-level=warning --no-magnetometer-bg-calibration ExecReload=/bin/kill -HUP $MAINPID Restart=always RestartSec=1 diff --git a/sensord/main.cpp b/sensord/main.cpp index a77e8b67..17e2acb2 100644 --- a/sensord/main.cpp +++ b/sensord/main.cpp @@ -33,6 +33,8 @@ #include #include +#include + #include #include #include @@ -175,6 +177,11 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } + if (parser.notifySystemd()) + { + sd_notify(0, "READY=1"); + } + int ret = app.exec(); sensordLogD() << "Exiting..."; Config::close(); @@ -185,6 +192,7 @@ void printUsage() { qDebug() << "Usage: sensord [OPTIONS]"; qDebug() << " -d, --daemon Detach from terminal and run as daemon.\n"; + qDebug() << " -s, --systemd Notify systemd when ready.\n"; qDebug() << " -l=N, --log-level= Use given logging level. Messages are logged for"; qDebug() << " the given and higher priority levels. Level"; qDebug() << " can also be notched up by sending SIGUSR1 to"; diff --git a/sensord/parser.cpp b/sensord/parser.cpp index 9eff4694..e7d6fbfd 100644 --- a/sensord/parser.cpp +++ b/sensord/parser.cpp @@ -33,6 +33,7 @@ Parser::Parser(QStringList arguments) : configFile_(false), configDir_(false), daemon_(false), + systemd_(false), magnetometerCalibration_(true), configFilePath_(""), logLevel_(QtWarningMsg) @@ -81,7 +82,9 @@ void Parser::parsingCommandLine(QStringList arguments) else if (opt.startsWith("--no-magnetometer-bg-calibration")) magnetometerCalibration_ = false; else if (opt.startsWith("-d") || opt.startsWith("--daemon")) - daemon_ = true; + daemon_ = true, systemd_ = false; + else if (opt.startsWith("-s") || opt.startsWith("--systemd")) + systemd_ = true, daemon_ = false; else if (opt.startsWith("-h") || opt.startsWith("--help")) printHelp_ = true; else if (opt.startsWith("-")) @@ -134,3 +137,8 @@ bool Parser::createDaemon() const return daemon_; } +bool Parser::notifySystemd() const +{ + return systemd_; +} + diff --git a/sensord/parser.h b/sensord/parser.h index 19a71d8a..7a39591b 100644 --- a/sensord/parser.h +++ b/sensord/parser.h @@ -48,6 +48,7 @@ class Parser bool contextInfo() const; bool magnetometerCalibration() const; bool createDaemon() const; + bool notifySystemd() const; private: void parsingCommandLine(QStringList arguments); @@ -57,6 +58,7 @@ class Parser bool configFile_; bool configDir_; bool daemon_; + bool systemd_; bool magnetometerCalibration_; QString configFilePath_; diff --git a/sensord/sensord.pro b/sensord/sensord.pro index c5238f0e..c1257030 100644 --- a/sensord/sensord.pro +++ b/sensord/sensord.pro @@ -8,6 +8,8 @@ TARGET = sensorfwd CONFIG += console \ link_pkgconfig +PKGCONFIG += libsystemd + SENSORFW_INCLUDEPATHS = .. \ ../include \ ../filters \