diff options
author | Kyungwook Tak <k.tak@samsung.com> | 2016-09-23 14:55:26 +0900 |
---|---|---|
committer | Kyungwook Tak <k.tak@samsung.com> | 2016-09-23 15:43:50 +0900 |
commit | 6ec381a3d133c278b6a33c104c195bbe9375570f (patch) | |
tree | 88e36a0f10dd1b13e2ffa60ff3777911f8046ac4 | |
parent | e6a9ed48e9b66a72a94ea9ca8a7e1f8833368a09 (diff) | |
download | key-manager-6ec381a3d133c278b6a33c104c195bbe9375570f.tar.gz key-manager-6ec381a3d133c278b6a33c104c195bbe9375570f.tar.bz2 key-manager-6ec381a3d133c278b6a33c104c195bbe9375570f.zip |
Use argos_watchdog
argos watchdog is watchdog lib which has systemd backend
on platform and backend can be reimplemented by product developer
argos watchdog provides per-process watchdog registration
(systemd allows per-thread but it's not guaranteed by other
backends for now)
This feature is on discussion with multiple product divisions
so it would be easily enabled/disabled by build feature
in compile time
Change-Id: Idb28caa52f3d20a2e0030c84852ad101fdbb6623
Signed-off-by: Kyungwook Tak <k.tak@samsung.com>
-rw-r--r-- | CMakeLists.txt | 8 | ||||
-rw-r--r-- | packaging/key-manager.spec | 17 | ||||
-rw-r--r-- | src/CMakeLists.txt | 7 | ||||
-rw-r--r-- | src/manager/service/glib-logic.cpp | 34 | ||||
-rw-r--r-- | src/manager/service/glib-logic.h | 4 | ||||
-rw-r--r-- | systemd/central-key-manager.service.in | 1 |
6 files changed, 68 insertions, 3 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index d15650f3..1ade7565 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,6 +67,14 @@ ADD_DEFINITIONS("-DCA_CERTS_DIR=\"${CA_CERTS_DIR}\"") ADD_DEFINITIONS("-DSYSTEMD_ENV_FILE=\"${SYSTEMD_ENV_FILE}\"") ADD_DEFINITIONS("-DUPGRADE_DATA_DIR=\"${UPGRADE_DATA_DIR}\"") +IF (DEFINED WATCHDOG_ENABLED) + MESSAGE("WATCHDOG ENABELD!") + ADD_DEFINITIONS("-DWATCHDOG_ENABLED") + ADD_DEFINITIONS("-DWATCHDOG_TIMEOUT_SEC=${WATCHDOG_TIMEOUT_SEC}") + ADD_DEFINITIONS("-DWATCHDOG_NOTIFY_SEC=${WATCHDOG_NOTIFY_SEC}") + SET(WATCHDOG_DECLARE "NotifyAccess=main") +ENDIF (DEFINED WATCHDOG_ENABLED) + IF (CMAKE_BUILD_TYPE MATCHES "DEBUG") ADD_DEFINITIONS("-DTIZEN_DEBUG_ENABLE") ADD_DEFINITIONS("-DBUILD_TYPE_DEBUG") diff --git a/packaging/key-manager.spec b/packaging/key-manager.spec index b6af62a8..c6089ded 100644 --- a/packaging/key-manager.spec +++ b/packaging/key-manager.spec @@ -1,3 +1,7 @@ +%global watchdog_enabled 1 +%global watchdog_timeout_sec 60 +%global watchdog_notify_sec 20 + Name: key-manager Summary: Central Key Manager and utilities Version: 0.1.23 @@ -25,6 +29,9 @@ BuildRequires: pkgconfig(cynara-creds-socket) BuildRequires: pkgconfig(libtzplatform-config) BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(pkgmgr) +%if 0%{?watchdog_enabled} +BuildRequires: pkgconfig(argos_watchdog) +%endif BuildRequires: boost-devel BuildRequires: ca-certificates-devel #Requires(pre): tizen-platform-config-tools @@ -124,7 +131,6 @@ cp -a %{SOURCE1004} . export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE" %endif - export LDFLAGS+="-Wl,--rpath=%{_libdir},-Bsymbolic-functions " %cmake . -DVERSION=%{version} \ @@ -147,8 +153,13 @@ export LDFLAGS+="-Wl,--rpath=%{_libdir},-Bsymbolic-functions " -DINITIAL_VALUES_DIR=%{initial_values_dir} \ -DDB_TEST_DIR=%{db_test_dir} \ -DCA_CERTS_DIR=%{ca_certs_dir} \ - -DUPGRADE_SCRIPT_DIR=%{upgrade_script_dir} \ - -DUPGRADE_DATA_DIR=%{upgrade_data_dir} +%if 0%{?watchdog_enabled} + -DWATCHDOG_ENABLED=%{watchdog_enabled} \ + -DWATCHDOG_TIMEOUT_SEC=%{watchdog_timeout_sec} \ + -DWATCHDOG_NOTIFY_SEC=%{watchdog_notify_sec} \ +%endif + -DUPGRADE_DATA_DIR=%{upgrade_data_dir} \ + -DUPGRADE_SCRIPT_DIR=%{upgrade_script_dir} make %{?jobs:-j%jobs} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4851987a..6168961b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,3 +1,9 @@ +IF (DEFINED WATCHDOG_ENABLED) +SET(EXTRA_KM_DEPS argos_watchdog) +ELSE (DEFINED WATCHDOG_ENABLED) +SET(EXTRA_KM_DEPS) +ENDIF (DEFINED WATCHDOG_ENABLED) + PKG_CHECK_MODULES(KEY_MANAGER_DEP REQUIRED dlog @@ -13,6 +19,7 @@ PKG_CHECK_MODULES(KEY_MANAGER_DEP cynara-client-async cynara-creds-socket pkgmgr + ${EXTRA_KM_DEPS} ) FIND_PACKAGE(Threads REQUIRED) diff --git a/src/manager/service/glib-logic.cpp b/src/manager/service/glib-logic.cpp index 471ce8ce..b64cb14e 100644 --- a/src/manager/service/glib-logic.cpp +++ b/src/manager/service/glib-logic.cpp @@ -31,6 +31,10 @@ #include <dpl/log/log.h> #include <glib-logic.h> +#ifdef WATCHDOG_ENABLED +#include <argos.h> +#endif + namespace { struct PkgmgrEvent { PkgmgrEvent(uid_t _uid, const char *_pkgid) @@ -98,11 +102,41 @@ void GLIBLogic::LoopStart() return; } +#ifdef WATCHDOG_ENABLED + int ret = aw_register(WATCHDOG_TIMEOUT_SEC); + if (ret != 0) { + LogError("Failed to aw_register. ret(errno): " << ret); + } else { + LogInfo("aw_register success! watchdog registered."); + if (g_timeout_add_seconds(WATCHDOG_NOTIFY_SEC, watchdogMsgSender, nullptr) <= 0) { + LogError("Failed to add source for watchdog notify timer. " + "let's disable registered watchdog."); + + ret = aw_control(AW_OP_DISABLE, nullptr); + if (ret != 0) + LogError("Failed to disable registerd watchdog..."); + } + } +#endif + LogDebug("Starting g_main_loop"); g_main_loop_run(m_gMainLoop); LogDebug("...g_main_loop ended"); } +#ifdef WATCHDOG_ENABLED +gboolean GLIBLogic::watchdogMsgSender(gpointer /*data*/) +{ + int ret = aw_notify(); + if (ret != 0) + LogError("Failed to aw_notify. ret(errno): " << ret); + else + LogInfo("aw_notify success!"); + + return TRUE; +} +#endif + void GLIBLogic::LoopStop() { LogDebug("Closing g_main_loop"); diff --git a/src/manager/service/glib-logic.h b/src/manager/service/glib-logic.h index 7cadbfeb..feba079c 100644 --- a/src/manager/service/glib-logic.h +++ b/src/manager/service/glib-logic.h @@ -51,6 +51,10 @@ protected: const void *pmsg, void *data); +#ifdef WATCHDOG_ENABLED + static gboolean watchdogMsgSender(gpointer data); +#endif + int packageEventCallback( uid_t uid, int reqid, diff --git a/systemd/central-key-manager.service.in b/systemd/central-key-manager.service.in index c03c723f..201bcb98 100644 --- a/systemd/central-key-manager.service.in +++ b/systemd/central-key-manager.service.in @@ -14,6 +14,7 @@ Sockets=central-key-manager-api-ocsp.socket Sockets=central-key-manager-api-encryption.socket EnvironmentFile=-@SYSTEMD_ENV_FILE@ RuntimeDirectory=@SERVICE_NAME@ +@WATCHDOG_DECLARE@ [Install] WantedBy=multi-user.target |