Name: mm-resource-manager
Summary: A Multimedia Resource Manager API
-Version: 0.2.37
+Version: 0.2.38
Release: 0
Group: Multimedia/API
License: Apache-2.0
static gboolean remove_pid_file(void);
static gboolean remove_ready_file(void);
static gboolean remove_daemon_setup_file(void);
-static int set_signal_handlers(void);
-static void terminate_handler(int signum);
-static void reload_conf_handler(int signum);
-static void quit_main_loop(void);
-
-
static gboolean fork_wait(void)
{
return remove_pid_file() && remove_ready_file();
}
-static int set_signal_handlers(void)
-{
- struct sigaction sa_term;
- struct sigaction sa_reload_conf;
- struct sigaction sa_ignore;
-
- sa_term.sa_handler = terminate_handler;
- sigemptyset(&sa_term.sa_mask);
- sa_term.sa_flags = SA_RESETHAND;
-
- sa_reload_conf.sa_handler = reload_conf_handler;
- sigemptyset(&sa_reload_conf.sa_mask);
- sa_reload_conf.sa_flags = 0;
-
- sa_ignore.sa_handler = SIG_IGN;
- sigemptyset(&sa_ignore.sa_mask);
- sa_ignore.sa_flags = 0;
-
- return sigaction(SIGTERM, &sa_term, NULL) != -1 &&
- sigaction(SIGINT, &sa_ignore, NULL) != -1 &&
- sigaction(SIGQUIT, &sa_ignore, NULL) != -1 &&
- sigaction(SIGHUP, &sa_reload_conf, NULL) != -1;
-}
-
-static void terminate_handler(int signum)
-{
- MM_RM_DEBUG("SIGTERM is received");
- quit_main_loop();
-}
-
-static void reload_conf_handler(int signum)
-{
- MM_RM_DEBUG("SIGHUP is received");
- restart = TRUE;
- quit_main_loop();
-}
-
-static void quit_main_loop(void)
-{
- if (main_loop) {
- _mmrm_dmn_status_callback(MM_RESOURCE_MANAGER_STATUS_DISCONNECTED);
- g_main_loop_quit(main_loop);
- }
-}
-
int main(int argc, char *argv[])
{
switch (daemonize(NULL)) {
case MM_RESOURCE_MANAGER_DAEMON_NOW:
- MM_RM_RETVM_IF(!set_signal_handlers(), EXIT_FAILURE, "Daemon cannot set signal handlers");
#ifdef RM_GCOV_TEST
setenv("GCOV_PREFIX", "/tmp", 1);
#define MM_RESOURCE_MANAGER_RESERVED_PART_ARRAY_SIZE 4 /* preallocated size */
#define MM_RESOURCE_MANAGER_RESERVED_CALLBACK_ARRAY_SIZE 32 /* preallocated size */
#define MM_RESOURCE_MANGER_NOT_FOUND -1
-#define RELEASE_CB_SYNC_TIMEOUT 300 /* milliseconds */
+#define RELEASE_CB_SYNC_TIMEOUT 500 /* milliseconds */
typedef enum {
MM_RESOURCE_MANAGER_RES_STATE_FOR_ACQUIRE,
mm_resource_manager_id recv_id;
ssize_t read_size;
+ MM_RM_DEBUG("Enter");
sync.fd = open(RELEASE_CB_SYNC_PATH, O_RDONLY | O_NONBLOCK);
+ MM_RM_DEBUG("[%d] opened %s", sync.fd, RELEASE_CB_SYNC_PATH);
+
MM_RM_RETVM_IF(sync.fd == -1, FALSE, "Sync FIFO cannot be opened");
if (!__poll(sync, id))
out:
close(sync.fd);
+ MM_RM_DEBUG("[%d] closed", sync.fd);
return ret;
}
g_mutex_init(&handle->resources_lock);
*rm = (mm_resource_manager_h *) handle;
+
+ MM_RM_INFO("adding handle %p", handle);
+
__mm_resource_handles_lock();
g_ptr_array_add(handles, handle);
mm_resource_manager_res_p resource = (mm_resource_manager_res_p) resource_h;
int idx;
+ MM_RM_INFO("Enter %p", rm);
+
__mm_resource_handles_lock();
MM_RESOURCE_MANAGER_CHECK(handle);
__mm_resources_lock(handle);
{
mm_resource_manager_s *handle = MM_RESOURCE_MANAGER(rm);
+ MM_RM_INFO("Enter %p", rm);
+
__mm_resource_handles_lock();
MM_RESOURCE_MANAGER_CHECK(handle);
__mm_resources_lock(handle);
static void __mm_resource_handles_lock(void)
{
+ LOGD(">>> handles lock");
g_mutex_lock(&handles_lock);
}
static void __mm_resource_handles_unlock(void)
{
g_mutex_unlock(&handles_lock);
+ LOGD("<<< handles unlock");
}
static void __mm_resources_lock(mm_resource_manager_s *h)
{
int sync_fd;
+ MM_RM_DEBUG("Enter");
sync_fd = open(RELEASE_CB_SYNC_PATH, O_WRONLY);
+ MM_RM_DEBUG("[%d] opened %s", sync_fd, RELEASE_CB_SYNC_PATH);
+
MM_RM_RETM_IF(sync_fd == -1, "Sync FIFO cannot be opened [errno %d]", errno);
if (write(sync_fd, &id, sizeof(id)) == sizeof(id))
MM_RM_ERROR("[SYNC] message cannot be sent RM #%"PRIu64, _mm_rm_hash64(id));
close(sync_fd);
+ MM_RM_DEBUG("[%d] closed", sync_fd);
}
static void __init_lib()