[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;
}
}