Merge "[Bugfix][T106BUG-181] Resolve the problem poweralarm not start on time"
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h b/cap/zx297520v3/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
index ec50ef7..3bb398f 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
@@ -64,6 +64,9 @@
 int lynq_hangup_waiting_or_background(void);

 int lynq_hangup_foreground_resume_background(void);

 

+/* add for T106bug-213 2023/9/18 */

+void lynq_release_wait_call();

+

 /*lei add for API-163/API-164 2023/1/3*/

 /**

  * @brief                  wait_call_state_change

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-call/lynq_call.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-call/lynq_call.cpp
index b40f6c1..58849e7 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-call/lynq_call.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-call/lynq_call.cpp
@@ -765,7 +765,6 @@
         return LYNQ_E_PARAMETER_ANONALY;

     }

     g_module_init_flag = MODULE_SWITCHING;

-    s_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;

     

     LYLOGSET(LOG_INFO);

     LYLOGEINIT(USER_LOG_TAG);   

@@ -819,7 +818,6 @@
     lynq_close_all_rc_socket_thread();    

     lynq_stop_call_list_loop();

     g_module_init_flag = MODULE_CLOSED;

-    pthread_mutex_destroy(&s_call_state_change_mutex);

     return 0;

 }

 

@@ -1457,7 +1455,10 @@
 }

 /*audio end*/

 

-

+void lynq_release_wait_call()

+{

+    pthread_cond_signal(&s_call_state_change_cond);

+}

 

 bool is_support_urc(int urc_id)

 {

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-voice/lynq-qser-voice.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-voice/lynq-qser-voice.cpp
index fa210e6..a35a192 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-voice/lynq-qser-voice.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-voice/lynq-qser-voice.cpp
@@ -48,6 +48,10 @@
     while (s_voice_thread_status)
     {
         lynq_wait_call_state_change(&handle);
+        if(s_voice_thread_status == 0)
+        {
+            return NULL;
+        }
         lynq_get_current_call_state(&handle,&call_state,&toa,&direction,addr);
         if (call_state == LYNQ_CALL_ACTIVE)
         {
@@ -141,19 +145,14 @@
 
 int qser_voice_call_removestatehandle(voice_client_handle_type h_voice)
 {
-    int ret;
-    if (s_lynq_voice_tid != -1)
-    {
-        ret = pthread_cancel(s_lynq_voice_tid);
-        LYDBGLOG("pthread cancel ret = %d",ret);
-    }
-    if (s_lynq_voice_tid != -1)
-    {
-        ret = pthread_join(s_lynq_voice_tid,NULL);
-        LYDBGLOG("pthread cancel ret = %d",ret);
-        s_lynq_voice_tid = -1;
-    }
+
+    LYINFLOG("Enter removestatehandle !!!");
     s_voice_thread_status = 0;
+    if(s_lynq_voice_tid != -1)
+    {
+        lynq_release_wait_call();            
+    }
+    
     s_voice_cb = NULL;
     return RESULT_OK;
 }