diff --git a/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp b/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
index 51d3cb8..3424c22 100755
--- a/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
@@ -129,7 +129,9 @@
                     p.writeInt32 (LYNQ_URC_DATA_CALL_STATUS_IND);
                     p.writeInt32 (0);//temporary plan
                     p.writeInt32(PDN_DISCONNECTED);
+                    writeStringToParcel(p,urc_response->apnName);
                     writeStringToParcel(p,urc_response->apnType);
+                    writeStringToParcel(p,urc_response->ifname);
                     android::LYNQ_RIL_urcBroadcast(p,LYNQ_URC_DATA_CALL_STATUS_IND);
                     RLOGD("removed apn:%s,apntype:%s",apn_table[i].apn,apn_table[i].apntype);
                     break;
diff --git a/src/lynq/lib/liblynq-data/lynq_data.cpp b/src/lynq/lib/liblynq-data/lynq_data.cpp
index eee2f6c..3d38cdf 100755
--- a/src/lynq/lib/liblynq-data/lynq_data.cpp
+++ b/src/lynq/lib/liblynq-data/lynq_data.cpp
@@ -110,6 +110,7 @@
     for(ret;ret<LYNQ_APN_CHANNEL_MAX;ret++)
     {
         len = strlen(lynq_apn_table[ret].apnType)<strlen(apnType) ? strlen(lynq_apn_table[ret].apnType):strlen(apnType);
+        LYINFLOG("apn_table[%d].apnType:%s,input apntype:%s,len:%d",ret,lynq_apn_table[ret].apnType,apnType,len);
         if(strncmp(lynq_apn_table[ret].apnType,apnType,len)==0)
         {
             return ret;
@@ -362,20 +363,25 @@
 int printf_apn_table()
 {
     int ret = 0;
-	if (lynq_apn_table == NULL)
-	{
-		LYERRLOG("apn table is null");
-		return -1;
-	}	
+    if (lynq_apn_table == NULL)
+    {
+        LYERRLOG("apn table is null");
+        return -1;
+    }
     for(ret;ret<LYNQ_APN_CHANNEL_MAX;ret++)
     {
-        LYINFLOG("[Typethree test info]apn=%s ;apntype=%s ;ifname=%s ;hasTimeout = %d ; hasUsed = %d", \
+        LYINFLOG("[%s][%d] apn=%s ;apntype=%s ;ifname=%s ;hasTimeout = %d ; hasUsed = %d",__FUNCTION__,ret, \
         lynq_apn_table[ret].apn,lynq_apn_table[ret].apnType,lynq_apn_table[ret].ifaceName, \
         lynq_apn_table[ret].hasTimeout,lynq_apn_table[ret].hasUsed);
     }
     return 0;
 }
 
+void printf_apn_table_debug(const char *fun,int line)
+{
+    LYINFLOG("[%s][%d]apn_table msg",fun,line);
+    printf_apn_table();
+}
 
 void urc_msg_process(Parcel *p)
 {
@@ -407,25 +413,28 @@
             {
                 urc_msg = strdupReadString_p(p);
                 int len = strlen(urc_msg);
-                if(len < LYNQ_APN_MAX_LEN-1)
+                if((len < LYNQ_APN_MAX_LEN-1) && (len > 0))
                 {
                     memcpy(apn,urc_msg,len+1);
                 }
+                free(urc_msg);
                 urc_msg = strdupReadString_p(p);
                 len = strlen(urc_msg);
-                if(len < LYNQ_APN_TYPE_MAX_LEN-1)
+                if((len < LYNQ_APN_TYPE_MAX_LEN-1) && (len > 0))
                 {
                     memcpy(apnType,urc_msg,len+1);
                 }
+                free(urc_msg);
                 urc_msg = strdupReadString_p(p);
                 len = strlen(urc_msg);
-                if(len < LYNQ_IFACE_NAME_MAX_LEN-1)
+                if((len < LYNQ_IFACE_NAME_MAX_LEN-1) && (len > 0))
                 {
                     memcpy(ifaceName,urc_msg,strlen(urc_msg)+1);
                 }
+                free(urc_msg);
                 //sendSignalDataCallStateChange();
                 int apnId = getLynqApnID(apnType);
-                LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d",apnType,ifaceName,apn,pdnState);
+                LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",apnType,ifaceName,apn,pdnState,apnId);
                 if(apnId >= 0)
                 {
                     if(lynq_apn_table[apnId].hasTimeout==1)
@@ -446,11 +455,12 @@
                         break;
                     }
                     updateApnTable(&lynq_apn_table[apnId],apn,apnType,ifaceName);
+                    printf_apn_table_debug(__FUNCTION__,__LINE__);
                 }
                 /*To be completed*/
                 else
                 {
-					data_invaild_error = 1;
+                    data_invaild_error = 1;
                     printf_apn_table();
                     LYERRLOG("invalid apnId:%d",apnId);
                     break;
@@ -478,17 +488,22 @@
                     lynq_data_call = 0;
                     data_timelimit = 0;
                 }
+                printf_apn_table_debug(__FUNCTION__,__LINE__);
             }
             else
             {
                 urc_msg = strdupReadString_p(p);
+                free(urc_msg);
+                urc_msg = strdupReadString_p(p);
                 len = strlen(urc_msg);
                 if(len < LYNQ_APN_TYPE_MAX_LEN-1)
                 {
                     memcpy(apnType,urc_msg,len+1);
                 }
+                free(urc_msg);
                 LYDBGLOG("[data thread_urc_recv] apntype:%s",apnType);
                 int apnId = getLynqApnID(apnType);
+                LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",apnType,ifaceName,apn,pdnState,apnId);
                 if(apnId >= 0)
                 {
                     lynq_data_call_change_id = apnId;
@@ -516,6 +531,7 @@
                     lynq_data_call = 0;
                     data_timelimit = 0;
                 }
+                printf_apn_table_debug(__FUNCTION__,__LINE__);
             }
             break;
         case LYNQ_URC_MODIFY_APNDB:
@@ -530,6 +546,7 @@
                 strcpy(g_lynq_apn_result, urc_msg);
                 sendSignalApnChange();
             }
+            free(urc_msg);
             break;
         case LYNQ_URC_RESET_APNDB:
             {
@@ -544,6 +561,7 @@
                     strcpy(g_lynq_apn_result, urc_msg);
                     sendSignalApnChange();
                 }
+                free(urc_msg);
             }
         default:
             break;
@@ -678,16 +696,18 @@
             error = LYNQ_E_TIME_OUT;
             LYERRLOG("timeout:wait data Call state fail!!!");
             lynq_apn_table[lynq_data_call_id].hasTimeout = 1;
-			if (data_invaild_error == 1)
-			{
-				data_invaild_error = 0;
-				LYERRLOG("urc apn info error!!!");
-				return 8085;
-			}
+            if (data_invaild_error == 1)
+            {
+                data_invaild_error = 0;
+                LYERRLOG("urc apn info error!!!");
+                return 8085;
+            }
+            printf_apn_table_debug(__FUNCTION__,__LINE__);
             return error;
         }
         *handle = lynq_data_call_id;
     }
+    printf_apn_table_debug(__FUNCTION__,__LINE__);
     #endif //GSW_RIL_CFG
     return error;
 }
@@ -741,6 +761,7 @@
     JumpHeader(p,&resp_type,&request,&slot_id,&error);
     LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
     cleanOnceApnTable(lynq_data_call_id);
+    printf_apn_table_debug(__FUNCTION__,__LINE__);
     return error;
 }
 int lynq_setup_data_call_sp(int *handle,char *apn,char *apnType,char *user,char *password,char *authType,char *normalProtocol,char *roamingProtocol)
@@ -850,16 +871,18 @@
             error = LYNQ_E_TIME_OUT;
             LYERRLOG("timeout:wait data Call state fail!!!");
             lynq_apn_table[lynq_data_call_id].hasTimeout = 1;
-			if (data_invaild_error == 1)
-			{
-				data_invaild_error = 0;
-				LYERRLOG("urc apn info error!!!");
-				return 8085;
-			}
+            if (data_invaild_error == 1)
+            {
+                data_invaild_error = 0;
+                LYERRLOG("urc apn info error!!!");
+                return 8085;
+            }
+            printf_apn_table_debug(__FUNCTION__,__LINE__);
             return error;
         }
         *handle = lynq_data_call_id;
     }
+    printf_apn_table_debug(__FUNCTION__,__LINE__);
     return error;
 }
 /*
@@ -950,17 +973,47 @@
             p.readInt32(&dataCallList[i].cid);
             p.readInt32(&dataCallList[i].active);
             temp_char = strdupReadString(p);
-            memcpy(dataCallList[i].type,temp_char,strlen(temp_char)+1);
+            LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+            if(temp_char)
+            {
+                memcpy(dataCallList[i].type,temp_char,strlen(temp_char)+1);
+                free(temp_char);
+            }
             temp_char = strdupReadString(p);
-            memcpy(dataCallList[i].ifname,temp_char,strlen(temp_char)+1);
+            LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+            if(temp_char)
+            {
+                memcpy(dataCallList[i].ifname,temp_char,strlen(temp_char)+1);
+                free(temp_char);
+            }
             temp_char = strdupReadString(p);
-            memcpy(dataCallList[i].addresses,temp_char,strlen(temp_char)+1);
+            LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+            if(temp_char)
+            {
+                memcpy(dataCallList[i].addresses,temp_char,strlen(temp_char)+1);
+                free(temp_char);
+            }
             temp_char = strdupReadString(p);
-            memcpy(dataCallList[i].dnses,temp_char,strlen(temp_char)+1);
+            LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+            if(temp_char)
+            {
+                memcpy(dataCallList[i].dnses,temp_char,strlen(temp_char)+1);
+                free(temp_char);
+            }
             temp_char = strdupReadString(p);
-            memcpy(dataCallList[i].gateways,temp_char,strlen(temp_char)+1);
+            LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+            if(temp_char)
+            {
+                memcpy(dataCallList[i].gateways,temp_char,strlen(temp_char)+1);
+                free(temp_char);
+            }
             temp_char = strdupReadString(p);
-            memcpy(dataCallList[i].pcscf,temp_char,strlen(temp_char)+1);
+            LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+            if(temp_char)
+            {
+                memcpy(dataCallList[i].pcscf,temp_char,strlen(temp_char)+1);
+                free(temp_char);
+            }
             p.readInt32(&dataCallList[i].mtu);
         }
     }
diff --git a/src/lynq/lib/liblynq-data/lynq_data_urc.cpp b/src/lynq/lib/liblynq-data/lynq_data_urc.cpp
index 9f211eb..f5d127a 100755
--- a/src/lynq/lib/liblynq-data/lynq_data_urc.cpp
+++ b/src/lynq/lib/liblynq-data/lynq_data_urc.cpp
@@ -77,7 +77,7 @@
     {
         bzero(urc_data,LYNQ_REC_BUF);
         res = recvfrom(lynq_urc_sockfd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&urc_local_addr,(socklen_t*)&lynq_len_urc_addr_serv);
-        
+        LYINFLOG("[%s][%d] res:%d",__FUNCTION__,__LINE__,res);
         if(res<sizeof(int32_t)*2)
         {
             LYERRLOG("thread_urc_recv step2 fail: res is %d",res);
@@ -170,6 +170,7 @@
     struct sockaddr_in urc_local_addr;
     pthread_attr_t attr;
     lynq_urc_sockfd = socket(AF_INET,SOCK_DGRAM,0);
+    lynq_len_urc_addr_serv = sizeof(urc_local_addr);
     if(lynq_urc_sockfd < 0)
     {
         LYERRLOG("create socket for udp fail");
