-#include <stdlib.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
#include <sys/stat.h>
-#include <fcntl.h>
-#include <glib.h>
#include <iniparser.h>
-
#include "common/mm_resource_manager_utils.h"
#include "daemon/mm_resource_manager_daemon_priv.h"
#include "daemon/mm_resource_manager_daemon_conf.h"
-#define PID_FILE "/tmp/.mm-res-mgr.pid"
-#define PID_MSG_LEN (16)
typedef enum {
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);
} 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) {
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();
#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);
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()
{
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");
}