Add workqueue job after confirming that the module is valid 32/214432/11 accepted/tizen/unified/20190925.220406 submit/tizen/20190925.015442
authorYoungHun Kim <yh8004.kim@samsung.com>
Mon, 23 Sep 2019 04:49:21 +0000 (13:49 +0900)
committerYoungHun Kim <yh8004.kim@samsung.com>
Wed, 25 Sep 2019 01:32:44 +0000 (10:32 +0900)
Change-Id: Iec473889224723e137fe4bb5a347cb386a6177be

packaging/mused.spec
server/include/muse_server.h
server/src/muse_server.c
server/src/muse_server_ipc.c
server/src/muse_server_private.c
server/src/muse_server_workqueue.c

index 79943a6..aba247d 100644 (file)
@@ -1,6 +1,6 @@
 Name:       mused
 Summary:    A multimedia daemon
-Version:    0.3.89
+Version:    0.3.90
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0 and BSD-3-Clause
index 304b9ce..1a63b19 100644 (file)
@@ -42,6 +42,7 @@ int muse_server_module_get_data_fd(muse_module_h m);
 char *muse_server_module_get_msg(muse_module_h m);
 void muse_server_set_user_data(muse_module_h m, void *data);
 void *muse_server_get_user_data(muse_module_h m);
+bool muse_server_module_is_valid(muse_module_h m);
 
 /* ipc */
 int muse_server_ipc_get_bufmgr(tbm_bufmgr *bufmgr);
index f6a87aa..bb6c7dd 100644 (file)
@@ -48,7 +48,6 @@ int muse_server_module_get_value(muse_module_h m, const char *name, int *value)
        gpointer ptr;
 
        muse_return_val_if_fail(m, MM_ERROR_INVALID_ARGUMENT);
-       muse_return_val_if_fail(m->pid > 0, MM_ERROR_INVALID_ARGUMENT);
        muse_return_val_if_fail(name, MM_ERROR_INVALID_ARGUMENT);
        muse_return_val_if_fail(value, MM_ERROR_INVALID_ARGUMENT);
 
@@ -61,21 +60,18 @@ int muse_server_module_get_value(muse_module_h m, const char *name, int *value)
 int muse_server_module_get_msg_fd(muse_module_h m)
 {
        muse_return_val_if_fail(m, MM_ERROR_INVALID_ARGUMENT);
-       muse_return_val_if_fail(m->pid > 0, MM_ERROR_INVALID_ARGUMENT);
        return m->ch[MUSE_CHANNEL_MSG].sock_fd;
 }
 
 int muse_server_module_get_data_fd(muse_module_h m)
 {
        muse_return_val_if_fail(m, MM_ERROR_INVALID_ARGUMENT);
-       muse_return_val_if_fail(m->pid > 0, MM_ERROR_INVALID_ARGUMENT);
        return m->ch[MUSE_CHANNEL_DATA].sock_fd;
 }
 
 char *muse_server_module_get_msg(muse_module_h m)
 {
        muse_return_val_if_fail(m, NULL);
-       muse_return_val_if_fail(m->pid > 0, NULL);
        return (m->recv_msg + m->msg_offset);
 }
 
@@ -91,6 +87,14 @@ void *muse_server_get_user_data(muse_module_h m)
        return m->user_data;
 }
 
+bool muse_server_module_is_valid(muse_module_h m)
+{
+       muse_return_val_if_fail(m, false);
+       muse_return_val_if_fail(m->pid > 0, false);
+
+       return true;
+}
+
 /* ipc */
 int muse_server_ipc_get_bufmgr(tbm_bufmgr *bufmgr)
 {
index 1bb1030..37e79a6 100644 (file)
@@ -429,9 +429,9 @@ gboolean ms_ipc_job_function(ms_workqueue_job_t *job)
        muse_return_val_if_fail(ms_is_server_ready(), FALSE);
 
        m = (muse_module_h)job->user_data;
-       muse_return_val_if_fail(m, FALSE);
+       muse_return_val_if_fail(muse_server_module_is_valid(m), FALSE);
 
-       SECURE_LOGD("[%p] module's msg channel fd : %d", m, m->ch[MUSE_CHANNEL_MSG].sock_fd);
+       SECURE_LOGD("[PID %d %p] module's msg channel fd : %d", m->pid, m, m->ch[MUSE_CHANNEL_MSG].sock_fd);
 
        m->ch[MUSE_CHANNEL_MSG].thread = g_thread_try_new(MSG_THREAD_NAME, _ms_ipc_dispatch_worker, (gpointer)m, &error);
        if (!m->ch[MUSE_CHANNEL_MSG].thread && error) {
@@ -459,7 +459,7 @@ gboolean ms_ipc_data_job_function(ms_workqueue_job_t *job)
        muse_return_val_if_fail(ms_is_server_ready(), FALSE);
 
        m = (muse_module_h)job->user_data;
-       muse_return_val_if_fail(m, FALSE);
+       muse_return_val_if_fail(muse_server_module_is_valid(m), FALSE);
 
        m->ch[MUSE_CHANNEL_DATA].thread = g_thread_try_new(DATA_THREAD_NAME, _ms_ipc_data_worker, (gpointer)m, &error);
        if (!m->ch[MUSE_CHANNEL_DATA].thread && error) {
index be05805..003dd88 100644 (file)
@@ -385,7 +385,7 @@ static gboolean _ms_connection_handler(GIOChannel *source, GIOCondition conditio
        job->job_function = job_functions[channel];
        job->user_data = m;
 
-       if (ms_is_server_ready())
+       if (ms_is_server_ready() && muse_server_module_is_valid(m))
                ms_workqueue_add_job(muse_server->workqueue, job);
        else
                free(job);
index ef90e6e..416cc9f 100644 (file)
@@ -128,6 +128,7 @@ void ms_workqueue_deinit(ms_workqueue_t *workqueue)
 void ms_workqueue_add_job(ms_workqueue_t *workqueue, ms_workqueue_job_t *job)
 {
        muse_return_if_fail(workqueue);
+       muse_return_if_fail(job);
 
        pthread_mutex_lock(&workqueue->jobs_mutex);
        LL_ADD(job, workqueue->waiting_jobs);