[Bugfix][API-845][Data]Increase the cycle interval to reduce the CPU usage
Change-Id: I81b9e60339749405baed87043fe877effed3e82e
(cherry picked from commit e6d25b3718b1155361bef685079078d413f04028)
diff --git a/lib/liblynq-data/lynq_data.cpp b/lib/liblynq-data/lynq_data.cpp
index ed8a9c7..6772e2d 100755
--- a/lib/liblynq-data/lynq_data.cpp
+++ b/lib/liblynq-data/lynq_data.cpp
@@ -65,9 +65,6 @@
static pthread_mutex_t s_lynq_apn_change_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t s_lynq_apn_change_cond = PTHREAD_COND_INITIALIZER;
-
-pthread_t data_list_urc_vector_tid = -1;
-int data_urc_vector_status = 0;
static pthread_mutex_t s_lynq_urc_vector_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t s_lynq_urc_vector_cond = PTHREAD_COND_INITIALIZER;
/**g_lynq_data_sendto_mutex
@@ -75,6 +72,8 @@
*/
static pthread_mutex_t g_lynq_data_sendto_mutex;
+static int data_waiting_status = 0;
+
/**g_lynq_data_init_flag
* @brief mark data initialization state
* 0:deinit status
@@ -423,7 +422,7 @@
s_data_urc_wait_list.push_back(apnId);
pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
lynq_data_call_change_id = apnId;
- //sendSignalPdnChange();
+ sendSignalPdnChange();
LYDBGLOG("data call state:%d",lynq_data_call);
if(lynq_data_call==1)
{
@@ -448,8 +447,8 @@
pthread_mutex_lock(&s_lynq_urc_vector_mutex);
s_data_urc_wait_list.push_back(apnId);
pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
+ sendSignalPdnChange();
}
- //sendSignalPdnChange();
LYDBGLOG("data call state:%d",lynq_data_call);
if(lynq_data_call==1)
{
@@ -491,64 +490,10 @@
}
-void cleanup_urc_vector_mutex(void *arg)
-{
- pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
-}
-
-void *thread_urc_vector()
-{
- pthread_cleanup_push(cleanup_urc_vector_mutex, NULL);
- while (data_urc_vector_status)
- {
- while (!s_data_urc_wait_list.empty())
- {
- sendSignalPdnChange();
- usleep(10);
- }
- usleep(1);
- }
- pthread_cleanup_pop(0);
-}
-
-void cancel_urc_vector_signal_thread()
-{
- int ret;
-
- data_urc_vector_status = 0;
- pthread_mutex_lock(&s_lynq_urc_vector_mutex);
- if (data_list_urc_vector_tid != -1)
- {
- ret = pthread_cancel(data_list_urc_vector_tid);
- LYDBGLOG("pthread cancel ret = %d",ret);
- }
- pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
-
- if (data_list_urc_vector_tid != -1)
- {
- ret = pthread_join(data_list_urc_vector_tid,NULL);
- LYDBGLOG("pthread join ret = %d",ret);
- data_list_urc_vector_tid = -1;
- }
- pthread_mutex_lock(&s_lynq_urc_vector_mutex);
- s_data_urc_wait_list.clear();
- pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
-}
-
int create_urc_vector_signal_thread()
{
int ret;
-
- data_urc_vector_status = 1;
pthread_mutex_init(&s_lynq_urc_vector_mutex,NULL);
- ret = pthread_create(&data_list_urc_vector_tid,NULL,thread_urc_vector,NULL);
- if (ret < 0)
- {
- LYERRLOG("urc vector signal pthread create error");
- lynq_deinit_data_urc_thread();
- data_urc_vector_status = 0;
- return -1;
- }
pthread_mutex_lock(&s_lynq_urc_vector_mutex);
s_data_urc_wait_list.clear();
pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
@@ -618,7 +563,9 @@
LYERRLOG("lynq_deinit_data_urc_thread fail");
return ret;
}
- cancel_urc_vector_signal_thread();
+ pthread_mutex_lock(&s_lynq_urc_vector_mutex);
+ s_data_urc_wait_list.clear();
+ pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
return 0;
}
int lynq_setup_data_call(int *handle)
@@ -952,14 +899,27 @@
}
int lynq_wait_data_call_state_change(int *handle)
{
-
+ if (data_waiting_status == 1)
+ {
+ LYDBGLOG("some thread is waiting");
+ return -3;
+ }
+ LYDBGLOG("is empty :%d",s_data_urc_wait_list.empty());
+ if (s_data_urc_wait_list.empty())
+ {
+ LYDBGLOG("start wait");
+ data_waiting_status = 1;
+ waitPdnChange();
+ }
+ data_waiting_status = 0;
std::vector<int>::iterator iter;
- waitPdnChange();
pthread_mutex_lock(&s_lynq_urc_vector_mutex);
iter = s_data_urc_wait_list.begin();
- *handle = s_data_urc_wait_list.front();
-
+ if (iter != s_data_urc_wait_list.end())
+ {
+ *handle = *iter;
+ }
s_data_urc_wait_list.erase(iter);
pthread_mutex_unlock(&s_lynq_urc_vector_mutex);