diff --git a/src/lynq/lib/liblynq-data/lynq_data.cpp b/src/lynq/lib/liblynq-data/lynq_data.cpp
index ed8a9c7..6772e2d 100755
--- a/src/lynq/lib/liblynq-data/lynq_data.cpp
+++ b/src/lynq/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);
     
