Fix BAD_CHECK_OF_WAIT_COND
[platform/core/multimedia/pulseaudio-modules-tizen.git] / src / acm.c
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();