Fix coverity issue of MISSING_LOCK 27/303527/14 accepted/tizen/unified/20240104.012435 accepted/tizen/unified/riscv/20240105.060146
authorYoungHun Kim <yh8004.kim@samsung.com>
Mon, 1 Jan 2024 22:43:38 +0000 (07:43 +0900)
committerYoungHun Kim <yh8004.kim@samsung.com>
Wed, 3 Jan 2024 01:07:58 +0000 (10:07 +0900)
Change-Id: I06dcf6d05fca477846327b00b0d99bf44b373354

client/src/muse_client.c
packaging/mused.spec
server/src/muse_server.c
server/src/muse_server_ipc.c
server/src/muse_server_private.c
server/src/muse_server_watchdog.c

index d1c0b8f..b1c924b 100644 (file)
@@ -178,8 +178,8 @@ static int _mc_new(muse_channel_e channel)
                return ret;
        }
 
-       LOGI("[%d] #%d guaranteed that connect was returned", sock_fd, mc_table_id);
        g_mutex_lock(&mc_mutex);
+       LOGI("[%d] #%d guaranteed that connect was returned", sock_fd, mc_table_id);
        g_hash_table_insert(mc_table, GINT_TO_POINTER(sock_fd), GINT_TO_POINTER(mc_table_id++));
        g_mutex_unlock(&mc_mutex);
 
@@ -204,7 +204,10 @@ static void _mc_table_new(void)
 
 static gpointer _mc_get_fd_ptr(int sock_fd)
 {
-       muse_return_val_if_fail(mc_table, NULL);
+       g_autoptr(GMutexLocker) locker = g_mutex_locker_new(&mc_mutex);
+
+       if (!mc_table)
+               return NULL;
 
        return g_hash_table_lookup(mc_table, GINT_TO_POINTER(sock_fd));
 }
index 22f0c79..e366c81 100644 (file)
@@ -1,6 +1,6 @@
 Name:       mused
 Summary:    A multimedia daemon
-Version:    0.3.180
+Version:    0.3.181
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0
index 384f366..08dcd8f 100644 (file)
@@ -149,7 +149,6 @@ char *muse_server_ipc_get_data(muse_module_h m)
        muse_return_val_if_fail(m, NULL);
 
        ch = &m->ch[MUSE_CHANNEL_DATA];
-       muse_return_val_if_fail(ch->data_queue, NULL);
 
        g_mutex_lock(&ch->data_mutex);
        while (!(raw_data = (char *)g_queue_pop_head(ch->data_queue))) {
index ae9a75e..8e4c08c 100644 (file)
@@ -46,9 +46,11 @@ static void _ms_ipc_data_ch_init(muse_module_h m)
 {
        muse_return_if_fail(m);
 
-       m->ch[MUSE_CHANNEL_DATA].data_queue = g_queue_new();
-       g_mutex_init(&m->ch[MUSE_CHANNEL_DATA].data_mutex);
        g_cond_init(&m->ch[MUSE_CHANNEL_DATA].data_cond);
+       g_mutex_init(&m->ch[MUSE_CHANNEL_DATA].data_mutex);
+
+       g_autoptr(GMutexLocker) locker = g_mutex_locker_new(&m->ch[MUSE_CHANNEL_DATA].data_mutex);
+       m->ch[MUSE_CHANNEL_DATA].data_queue = g_queue_new();
 }
 
 static void _ms_ipc_data_ch_deinit(muse_module_h m)
@@ -387,9 +389,14 @@ static gpointer _ms_ipc_data_worker(gpointer data)
        muse_return_val_if_fail(data, NULL);
 
        m = (muse_module_h)data;
+
+       g_mutex_lock(&m->dispatch_lock);
+
        SECURE_LOGW("module : %p pid %d handle %zd created %d fd %d",
                m, m->pid, m->handle, m->is_created, m->ch[MUSE_CHANNEL_MSG].sock_fd);
 
+       g_mutex_unlock(&m->dispatch_lock);
+
        muse_return_val_if_fail(muse_server_module_is_valid(m), NULL);
 
        fd = m->ch[MUSE_CHANNEL_DATA].sock_fd;
@@ -421,7 +428,6 @@ gboolean ms_ipc_create_msg_dispatch_worker(muse_module_h m)
        LOGD("Enter %p", m);
 
        muse_return_val_if_fail(ms, FALSE);
-       muse_return_val_if_fail(ms_is_server_ready(), FALSE);
        muse_return_val_if_fail(muse_server_module_is_valid(m), FALSE);
 
        connection = ms->connection;
@@ -456,7 +462,6 @@ gboolean ms_ipc_create_data_dispatch_worker(muse_module_h m)
        LOGD("Enter %p", m);
 
        muse_return_val_if_fail(ms, FALSE);
-       muse_return_val_if_fail(ms_is_server_ready(), FALSE);
        muse_return_val_if_fail(muse_server_module_is_valid(m), TRUE);
 
        connection = ms->connection;
index 88bd5e8..519c5e4 100644 (file)
@@ -301,7 +301,7 @@ static gboolean _ms_connection_handler(GIOChannel *source, GIOCondition conditio
 
        _ms_lock_state();
 
-       if (!ms_is_server_ready()) {
+       if (muse_server->state != MUSE_SERVER_STATE_READY) {
                LOGW("Now mused state is not ready...");
                goto out;
        }
@@ -438,7 +438,7 @@ static void _ms_check_idle_state(void)
        char time_buf[MUSE_MSG_TIME_LEN];
 
        muse_return_if_fail(muse_server);
-       muse_return_if_fail(muse_server->state == MUSE_SERVER_STATE_READY);
+       muse_return_if_fail(ms_is_server_ready());
 
        connection = muse_server->connection;
        muse_return_if_fail(connection);
@@ -1395,6 +1395,8 @@ gboolean ms_is_server_ready(void)
 {
        muse_return_val_if_fail(muse_server, FALSE);
 
+       g_autoptr(GMutexLocker) locker = g_mutex_locker_new(&muse_server->state_lock);
+
        return muse_server->state == MUSE_SERVER_STATE_READY;
 }
 
index 56db10c..88f3c51 100644 (file)
@@ -47,11 +47,11 @@ static gpointer _ms_watchdog_thread(gpointer data)
 
        muse_return_val_if_fail(watchdog, NULL);
 
+       g_mutex_lock(&watchdog->lock);
+
        LOGW("watchdog start : %p", watchdog);
 
        while (watchdog->run) {
-               g_mutex_lock(&watchdog->lock);
-
                end_time = g_get_monotonic_time() + G_TIME_SPAN_SECOND * MS_WATCHDOG_CHECK_PERIOD;
                if (g_cond_wait_until(&watchdog->cond, &watchdog->lock, end_time)) {
                        try_count = 0;
@@ -66,12 +66,12 @@ static gpointer _ms_watchdog_thread(gpointer data)
                        g_mutex_unlock(&watchdog->lock);
                        ms_terminate(SIGABRT);
                }
-
-               g_mutex_unlock(&watchdog->lock);
        }
 
        LOGW("Leave");
 
+       g_mutex_unlock(&watchdog->lock);
+
        return NULL;
 }