[bugfix][API-393][call]After the CALL is deregistered, the CALL is initialized again. The result is FAIL (error code 8004), but the called party actually receives the CALL

Change-Id: Ia881d0a76737e6b72579a330b298dbde51feb18b
diff --git a/src/lynq/lib/liblynq-call/lynq_call.cpp b/src/lynq/lib/liblynq-call/lynq_call.cpp
index 6656dc6..4996a3b 100755
--- a/src/lynq/lib/liblynq-call/lynq_call.cpp
+++ b/src/lynq/lib/liblynq-call/lynq_call.cpp
@@ -71,8 +71,8 @@
 lynq_call_list_e_t lynq_call_lists[LYNQ_CALL_MAX]={};

 static pthread_mutex_t call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;

 static pthread_cond_t call_state_change_cond = PTHREAD_COND_INITIALIZER;

-static pthread_mutex_t s_urc_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;

-static pthread_cond_t s_urc_call_state_change_cond = PTHREAD_COND_INITIALIZER;

+static pthread_mutex_t *s_urc_call_state_change_mutex = NULL;

+static pthread_cond_t *s_urc_call_state_change_cond = NULL;

 static pthread_mutex_t s_incoming_call_mutex = PTHREAD_MUTEX_INITIALIZER;

 static pthread_cond_t s_incoming_call_cond = PTHREAD_COND_INITIALIZER;

 pthread_t lynq_call_urc_tid = -1;

@@ -86,7 +86,7 @@
 int client_size = 0;

 /*lei add*/

 

-int s_call_urc_event_complete = 1;

+int s_call_urc_event_complete = 0;

 

 enum{

     CALL_OFF=0,

@@ -129,7 +129,7 @@
 int global_call_count =0;

 int global_call_auto_answer = 0;

 bool urc_call_recive_status = 1;

-bool call_list_loop = 1;

+bool call_list_loop = 0;

 int isDial = 0;

 int lynqIncomingCallId = 0;

 

@@ -483,8 +483,8 @@
     while(call_list_loop)

     {

         update=0;

-        pthread_mutex_lock(&s_urc_call_state_change_mutex);

-        pthread_cond_wait(&s_urc_call_state_change_cond, &s_urc_call_state_change_mutex);

+        pthread_mutex_lock(s_urc_call_state_change_mutex);

+        pthread_cond_wait(s_urc_call_state_change_cond, s_urc_call_state_change_mutex);

         LYDBGLOG("triggerGetCallList event!!!");

         memset(call_list,0,sizeof(call_list));

         ret = lynq_get_current_call_list(call_list);

@@ -643,7 +643,7 @@
         {

             LYINFLOG("now is not dialing");

         }

-        pthread_mutex_unlock(&s_urc_call_state_change_mutex);

+        pthread_mutex_unlock(s_urc_call_state_change_mutex);

     }

     return NULL;

 }

@@ -652,10 +652,10 @@
 {

     if(s_call_urc_event_complete==1)

     {

-        pthread_mutex_lock(&s_urc_call_state_change_mutex);

-        pthread_cond_signal(&s_urc_call_state_change_cond);

+        pthread_mutex_lock(s_urc_call_state_change_mutex);

+        pthread_cond_signal(s_urc_call_state_change_cond);

         s_call_urc_event_complete = 0;

-        pthread_mutex_unlock(&s_urc_call_state_change_mutex);

+        pthread_mutex_unlock(s_urc_call_state_change_mutex);

     }

     return;

 }

@@ -989,6 +989,15 @@
         return -1;

     }

     g_lynq_call_init_flag = 1;

+    s_call_urc_event_complete = 1;

+    call_list_loop = 1;

+    LYINFLOG("liulei call_list_loop %d\n", call_list_loop);

+    s_urc_call_state_change_mutex = new pthread_mutex_t;

+    pthread_mutex_init(s_urc_call_state_change_mutex, NULL);

+    s_urc_call_state_change_cond = new pthread_cond_t;

+    LYINFLOG("liulei s_urc_call_state_change_mutex\n");

+    pthread_cond_init(s_urc_call_state_change_cond, NULL);

+    LYINFLOG("liulei s_urc_call_state_change_cond\n");

     int result = 0;

     Global_uToken_call = uToken;

     urc_call_recive_status = 1;

@@ -1026,7 +1035,7 @@
         return -1;

     }

     else

-    {   

+    {

         g_lynq_call_init_flag = 0;

         lynq_call_hungup_all();       

         if(lynq_call_client_sockfd>0)

@@ -1048,6 +1057,13 @@
         LYDBGLOG("pthread join ret = %d",ret);

         ret = pthread_join(lynq_call_list_loop_tid,NULL);

         LYDBGLOG("pthread join ret = %d",ret);

+        pthread_mutex_destroy(s_urc_call_state_change_mutex);

+        pthread_cond_destroy(s_urc_call_state_change_cond);

+        delete s_urc_call_state_change_mutex;

+        //s_urc_call_state_change_mutex = NULL;

+        delete s_urc_call_state_change_cond;

+        //s_urc_call_state_change_cond = NULL;

+

         return 0;

     }

 }