From c6000fa48470ba3f62697fdca281192589f7ef37 Mon Sep 17 00:00:00 2001 From: YoungHun Kim Date: Thu, 8 Aug 2019 16:17:40 +0900 Subject: [PATCH] Create server setup file after dbus connection Change-Id: I128601bdb1cf7c7bb1f565354af7c3333c1b9ef0 --- .../backend/murphy/mm_resource_manager_mloop.c | 2 - src/daemon/mm_resource_manager_daemon.c | 81 ---------------------- src/daemon/mm_resource_manager_daemon_dbus.c | 71 ++++++++++++++++++- src/daemon/mm_resource_manager_daemon_priv.c | 1 - src/daemon/mm_resource_manager_daemon_priv.h | 5 +- src/lib/mm_resource_manager_priv.c | 7 -- src/lib/mm_resource_manager_priv.h | 3 + 7 files changed, 77 insertions(+), 93 deletions(-) diff --git a/src/daemon/backend/murphy/mm_resource_manager_mloop.c b/src/daemon/backend/murphy/mm_resource_manager_mloop.c index f697454..e61f04b 100644 --- a/src/daemon/backend/murphy/mm_resource_manager_mloop.c +++ b/src/daemon/backend/murphy/mm_resource_manager_mloop.c @@ -103,8 +103,6 @@ int _mm_resource_manager_mloop_create(mm_resource_manager_mloop_s **mrp) *mrp = handle; - _mmrm_dmn_notify_fork_done(); - MM_RM_INFO("Successfully performed mloop create"); return ret; diff --git a/src/daemon/mm_resource_manager_daemon.c b/src/daemon/mm_resource_manager_daemon.c index 12b7782..ccedc8a 100644 --- a/src/daemon/mm_resource_manager_daemon.c +++ b/src/daemon/mm_resource_manager_daemon.c @@ -16,16 +16,8 @@ -#include -#include -#include -#include -#include #include -#include -#include #include - #include "common/mm_resource_manager_utils.h" #include "daemon/mm_resource_manager_daemon_priv.h" #include "daemon/mm_resource_manager_daemon_conf.h" @@ -33,8 +25,6 @@ -#define PID_FILE "/tmp/.mm-res-mgr.pid" -#define PID_MSG_LEN (16) typedef enum { @@ -54,9 +44,6 @@ static gboolean fork_wait(void); static daemonize_result_e daemonize(const char *path); static gboolean init_event(gpointer user_data); static void daemon_loop(); -static gboolean create_pid_file(void); -static gboolean create_ready_file(void); -static gboolean create_daemon_setup_file(void); static gboolean remove_pid_file(void); static gboolean remove_ready_file(void); static gboolean remove_daemon_setup_file(void); @@ -166,72 +153,6 @@ end: } while (restart); } -static gboolean create_pid_file(void) -{ - int fd; - struct flock lock; - char pid_buf[PID_MSG_LEN] = {'\0',}; - - fd = open(PID_FILE, O_WRONLY | O_CREAT, (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)); - MM_RM_RETVM_IF(fd < 0, FALSE, "PID file cannot be created (%d)", errno); - - lock.l_type = F_WRLCK; - lock.l_start = 0; - lock.l_whence = SEEK_SET; - lock.l_len = 1000; - - if (fcntl(fd, F_SETLK, &lock) < 0) { - if (errno != EACCES && errno != EAGAIN) - MM_RM_ERROR("Fail to lock pidfile [%d]", errno); - else - MM_RM_ERROR("process is already running"); - - goto error; - } - - if (ftruncate(fd, 0) < 0) { - MM_RM_ERROR("Fail to truncate pidfile [%d]", errno); - goto error; - } - - memset(pid_buf, 0, sizeof(pid_buf)); - snprintf(pid_buf, sizeof(pid_buf), "%u", getpid()); - - if (write(fd, pid_buf, strlen(pid_buf)) != (int)strlen(pid_buf)) { - MM_RM_ERROR("Fail to write pid to pidfile [%d]", errno); - goto error; - } - - close(fd); - - MM_RM_INFO("PID file (%s) is created", PID_FILE); - return TRUE; - -error: - close(fd); - return FALSE; -} - -static gboolean create_ready_file(void) -{ - int fd = -1; - - if ((fd = creat(MM_RESOURCE_MANAGER_READY, 0644)) != -1) { - MM_RM_INFO("ready file(%s) file was created", MM_RESOURCE_MANAGER_READY); - close(fd); - } else { - MM_RM_ERROR("cannot create ready file(%s), errno(%d)", MM_RESOURCE_MANAGER_READY, errno); - return FALSE; - } - - return TRUE; -} - -static gboolean create_daemon_setup_file(void) -{ - return create_pid_file() && create_ready_file(); -} - static gboolean remove_pid_file(void) { if (unlink(PID_FILE) != 0) { @@ -309,8 +230,6 @@ int main(int argc, char *argv[]) case MM_RESOURCE_MANAGER_DAEMON_NOW: MM_RM_RETVM_IF(!set_signal_handlers(), EXIT_FAILURE, "Daemon cannot set signal handlers"); - MM_RM_RETVM_IF(!create_daemon_setup_file(), EXIT_FAILURE, - "Daemon cannot create setup file"); daemon_loop(); diff --git a/src/daemon/mm_resource_manager_daemon_dbus.c b/src/daemon/mm_resource_manager_daemon_dbus.c index 27e8d7b..a140c63 100755 --- a/src/daemon/mm_resource_manager_daemon_dbus.c +++ b/src/daemon/mm_resource_manager_daemon_dbus.c @@ -21,11 +21,11 @@ #include "daemon/mm_resource_manager_daemon_conf.h" - static MMResourceManager *interface; extern int notify_fd[2]; + static void __gv2c_array(GVariantIter *gv, mm_resource_manager_dmn_res_request_s **c); static gboolean on_get_conf(MMResourceManager *interface, GDBusMethodInvocation *invocation, gpointer user_data); @@ -41,6 +41,72 @@ static void on_bus_acquired(GDBusConnection *connection, const gchar *name, gpointer user_data); +static gboolean _create_pid_file(void) +{ + int fd; + struct flock lock; + char pid_buf[PID_MSG_LEN] = {'\0',}; + + fd = open(PID_FILE, O_WRONLY | O_CREAT, (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)); + MM_RM_RETVM_IF(fd < 0, FALSE, "PID file cannot be created (%d)", errno); + + lock.l_type = F_WRLCK; + lock.l_start = 0; + lock.l_whence = SEEK_SET; + lock.l_len = 1000; + + if (fcntl(fd, F_SETLK, &lock) < 0) { + if (errno != EACCES && errno != EAGAIN) + MM_RM_ERROR("Fail to lock pidfile [%d]", errno); + else + MM_RM_ERROR("process is already running"); + + goto error; + } + + if (ftruncate(fd, 0) < 0) { + MM_RM_ERROR("Fail to truncate pidfile [%d]", errno); + goto error; + } + + memset(pid_buf, 0, sizeof(pid_buf)); + snprintf(pid_buf, sizeof(pid_buf), "%u", getpid()); + + if (write(fd, pid_buf, strlen(pid_buf)) != (int)strlen(pid_buf)) { + MM_RM_ERROR("Fail to write pid to pidfile [%d]", errno); + goto error; + } + + close(fd); + + MM_RM_INFO("PID file (%s) is created", PID_FILE); + return TRUE; + +error: + close(fd); + return FALSE; +} + +static gboolean _create_ready_file(void) +{ + int fd = -1; + + if ((fd = creat(MM_RESOURCE_MANAGER_READY, 0644)) != -1) { + MM_RM_INFO("ready file(%s) file was created", MM_RESOURCE_MANAGER_READY); + close(fd); + } else { + MM_RM_ERROR("cannot create ready file(%s), errno(%d)", MM_RESOURCE_MANAGER_READY, errno); + return FALSE; + } + + return TRUE; +} + +static gboolean _create_daemon_setup_file(void) +{ + _mmrm_dmn_notify_fork_done(); + return _create_pid_file() && _create_ready_file(); +} int _mmrm_dmn_dbus_init() { @@ -276,5 +342,8 @@ static void on_bus_acquired(GDBusConnection *connection, const gchar *name, connection, RMD_GDBUS_PATH, &error)) { MM_RM_ERROR("failed to export interface. msg : %s", error->message); g_error_free(error); + return; } + + MM_RM_RETM_IF(!_create_daemon_setup_file(), "Daemon cannot create setup file"); } diff --git a/src/daemon/mm_resource_manager_daemon_priv.c b/src/daemon/mm_resource_manager_daemon_priv.c index f90b8e4..a0bb41b 100644 --- a/src/daemon/mm_resource_manager_daemon_priv.c +++ b/src/daemon/mm_resource_manager_daemon_priv.c @@ -16,7 +16,6 @@ #include #include -#include #include #include #include diff --git a/src/daemon/mm_resource_manager_daemon_priv.h b/src/daemon/mm_resource_manager_daemon_priv.h index 6d9909c..5e48465 100644 --- a/src/daemon/mm_resource_manager_daemon_priv.h +++ b/src/daemon/mm_resource_manager_daemon_priv.h @@ -17,10 +17,13 @@ #ifndef __MM_RESOURCE_MANAGER_DAEMON_PRIVATE__ #define __MM_RESOURCE_MANAGER_DAEMON_PRIVATE__ +#include +#include #include "common/mm_resource_manager_utils.h" #define MSG_DONE "DONE" - +#define PID_FILE "/tmp/.mm-res-mgr.pid" +#define PID_MSG_LEN (16) typedef struct { diff --git a/src/lib/mm_resource_manager_priv.c b/src/lib/mm_resource_manager_priv.c index 6192b6d..c3a7cdd 100644 --- a/src/lib/mm_resource_manager_priv.c +++ b/src/lib/mm_resource_manager_priv.c @@ -14,13 +14,6 @@ * limitations under the License. */ -#include -#include -#include -#include -#include -#include - #include "common/mm_resource_manager_utils.h" #include "lib/mm_resource_manager_priv.h" #include "common/mm_resource_manager_dbus.h" diff --git a/src/lib/mm_resource_manager_priv.h b/src/lib/mm_resource_manager_priv.h index 5363053..5532708 100644 --- a/src/lib/mm_resource_manager_priv.h +++ b/src/lib/mm_resource_manager_priv.h @@ -22,6 +22,9 @@ #include "lib/mm_resource_manager.h" #include +#include +#include +#include int _mm_resource_manager_create(mm_resource_manager_app_class_e app_class, mm_resource_manager_release_cb cb, void *cb_data, -- 2.7.4