Fix BAD_CHECK_OF_WAIT_COND 22/303522/3
authorSeungbae Shin <seungbae.shin@samsung.com>
Fri, 29 Dec 2023 09:45:33 +0000 (18:45 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Tue, 2 Jan 2024 04:48:12 +0000 (13:48 +0900)
[Version] 15.0.73
[Issue Type] Coverity

Change-Id: Iab2a0fded8cf6dc9f896790834cf3cd65e356ccb

packaging/pulseaudio-modules-tizen.spec
src/acm.c

index 3c9e605..67a39ed 100644 (file)
@@ -2,7 +2,7 @@
 
 Name:             pulseaudio-modules-tizen
 Summary:          Pulseaudio modules for Tizen
-Version:          15.0.72
+Version:          15.0.73
 Release:          0
 Group:            Multimedia/Audio
 License:          LGPL-2.1+
index 57deaf2..a44a319 100644 (file)
--- a/src/acm.c
+++ b/src/acm.c
@@ -169,10 +169,16 @@ static void msg_cond_wait(struct userdata *u) {
     pa_assert(u);
 
     pa_mutex_lock(u->msg_mutex);
-    if (pa_cond_timedwait(u->msg_cond, u->msg_mutex, MSG_WAIT_TIMEOUT))
-        pa_log_error("msg cond wait failed, timeout..");
-    else
-        pa_log_info("msg cond wakeup");
+
+    while (u->need_pause) {
+        pa_log_info("msg cond wait for resume");
+
+        if (pa_cond_timedwait(u->msg_cond, u->msg_mutex, MSG_WAIT_TIMEOUT))
+            pa_log_error("msg cond wait failed, timeout..");
+        else
+            pa_log_info("msg cond wakeup");
+    }
+
     pa_mutex_unlock(u->msg_mutex);
 }
 
@@ -416,10 +422,7 @@ static int send_data(struct userdata *u, pa_memchunk *chunk) {
     for (;;) {
         ssize_t sent;
 
-        if (u->need_pause) {
-            pa_log_info("msg cond wait for resume");
-            msg_cond_wait(u);
-        }
+        msg_cond_wait(u);
 
         sent = ipc_push_data(u, p + index, u->write_block_size);
 
@@ -557,6 +560,7 @@ static void msg_thread_func(void *userdata) {
         }
 
         if ((recv_len = recv(u->msg_fd, recv_msg , IPC_MAX_MSG_LEN, 0)) > 0) {
+            pa_mutex_lock(u->msg_mutex);
             if (!strncmp(recv_msg, MSG_DRAIN_COMPLETE, IPC_MAX_MSG_LEN)) {
                 pa_log_debug("got drain complete signal [%s]", recv_msg);
                 pa_cond_signal(u->msg_cond, false);
@@ -568,6 +572,7 @@ static void msg_thread_func(void *userdata) {
                 u->need_pause = false;
                 pa_cond_signal(u->msg_cond, false);
             }
+            pa_mutex_unlock(u->msg_mutex);
         }
 
         sched_yield();