Update snapshot(2017-11-29) 50/162250/1 accepted/tizen/unified/20171130.113340 submit/tizen/20171130.055456
authorHongkuk, Son <hongkuk.son@samsung.com>
Thu, 30 Nov 2017 02:03:56 +0000 (11:03 +0900)
committerHongkuk, Son <hongkuk.son@samsung.com>
Thu, 30 Nov 2017 02:04:13 +0000 (11:04 +0900)
Signed-off-by: Hongkuk, Son <hongkuk.son@samsung.com>
Change-Id: Id4d682d07ae11ccff14f9548c930ce146df8cf85

packaging/snapshot_history.txt
resource/csdk/connectivity/inc/catcpinterface.h
resource/csdk/connectivity/src/tcp_adapter/catcpadapter.c
resource/csdk/connectivity/src/tcp_adapter/catcpserver.c

index 51607b8..ff3efe3 100755 (executable)
@@ -1,3 +1,9 @@
+http://suprem.sec.samsung.net/jira/browse/CONPRO-1147
+
+commit_info_2017-11-29.txt
+
+commit_id: fe6f8f9c2aa1eb7c6b5172de862cb3126017729a
+----------------------------------------------------------------------------------------------------------------------------------
 http://suprem.sec.samsung.net/jira/browse/CONPRO-1142
 
 commit_info_2017-11-23.txt
index 201dd26..dda95e5 100644 (file)
@@ -235,6 +235,12 @@ CASocketFd_t CAGetSocketFDFromEndpoint(const CAEndpoint_t *endpoint);
  */
 CAResult_t CASearchAndDeleteTCPSession(const CAEndpoint_t *endpoint);
 
+
+/**
+ * Abort TCP sessions which are in progress of connecting with servers.
+ */
+void CATCPCloseInProgressConnections();
+
 /**
  * Get total payload length from CoAP over TCP header.
  *
index ac6f6d7..165e3db 100644 (file)
@@ -602,7 +602,15 @@ CAResult_t CAStopTCP()
 {
     CAIPStopNetworkMonitor(CA_ADAPTER_TCP);
 
+    /* Some times send queue thread fails to terminate as it's worker
+       thread gets blocked at TCP session's socket connect operation.
+       So closing sockets which are in connect operation at the time
+       of termination of adapter would save send queue thread from
+       getting blocked. */
+    CATCPCloseInProgressConnections();
+
 #ifndef SINGLE_THREAD
+    // Stop send queue thread.
     if (g_sendQueueHandle && g_sendQueueHandle->threadMutex)
     {
         CAQueueingThreadStop(g_sendQueueHandle);
@@ -610,9 +618,10 @@ CAResult_t CAStopTCP()
     CATCPDeinitializeQueueHandles();
 #endif
 
+    // Close TCP servers and established connections.
     CATCPStopServer();
 
-    //Re-initializing the Globals to start them again
+    // Re-initializing the Globals to start them again.
     CAInitializeTCPGlobals();
 
     return CA_STATUS_OK;
index 78b43bb..d998ad6 100644 (file)
@@ -1111,9 +1111,9 @@ static ssize_t sendData(const CAEndpoint_t *endpoint, const void *data,
 
     // #2. send data to remote device.
     ssize_t remainLen = dlen;
+    size_t sendCounter = 0;
     do
     {
-        size_t sendCounter = 0;
 #ifdef MSG_NOSIGNAL
         ssize_t len = send(sockFd, data, remainLen, MSG_DONTWAIT | MSG_NOSIGNAL);
 #else
@@ -1129,8 +1129,8 @@ static ssize_t sendData(const CAEndpoint_t *endpoint, const void *data,
                 return len;
             }
             sendCounter++;
-            OIC_LOG_V(WARNING, TAG, "send blocked. trying %zu attempt from 100", sendCounter);
-            if(sendCounter >= 100)
+            OIC_LOG_V(WARNING, TAG, "send blocked. trying %zu attempt from 25", sendCounter);
+            if(sendCounter >= 25)
             {
                 return len;
             }
@@ -1267,6 +1267,8 @@ CAResult_t CADisconnectTCPSession(size_t index)
 
 void CATCPDisconnectAll()
 {
+    OIC_LOG(DEBUG, TAG, "IN - CATCPDisconnectAll");
+
     oc_mutex_lock(g_mutexObjectList);
 
     uint32_t length = u_arraylist_length(caglobals.tcp.svrlist);
@@ -1285,6 +1287,7 @@ void CATCPDisconnectAll()
     CAcloseSslConnectionAll(CA_ADAPTER_TCP);
 #endif
 
+    OIC_LOG(DEBUG, TAG, "OUT - CATCPDisconnectAll");
 }
 
 CATCPSessionInfo_t *CAGetTCPSessionInfoFromEndpoint(const CAEndpoint_t *endpoint, size_t *index)
@@ -1398,6 +1401,37 @@ CAResult_t CASearchAndDeleteTCPSession(const CAEndpoint_t *endpoint)
     return result;
 }
 
+void CATCPCloseInProgressConnections()
+{
+    OIC_LOG(INFO, TAG, "IN - CATCPCloseInProgressConnections");
+
+    oc_mutex_lock(g_mutexObjectList);
+
+    uint32_t length = u_arraylist_length(caglobals.tcp.svrlist);
+    for (size_t index = 0; index < length; index++)
+    {
+        CATCPSessionInfo_t *svritem = (CATCPSessionInfo_t *) u_arraylist_get(
+                caglobals.tcp.svrlist, index);
+        if (!svritem)
+        {
+            continue;
+        }
+
+        // Session which are connecting state
+        if (svritem->fd >= 0 && svritem->state == CONNECTING)
+        {
+            shutdown(svritem->fd, SHUT_RDWR);
+            close(svritem->fd);
+            svritem->fd = -1;
+            svritem->state = DISCONNECTED;
+        }
+    }
+
+    oc_mutex_unlock(g_mutexObjectList);
+
+    OIC_LOG(INFO, TAG, "OUT - CATCPCloseInProgressConnections");
+}
+
 size_t CAGetTotalLengthFromHeader(const unsigned char *recvBuffer)
 {
     OIC_LOG(DEBUG, TAG, "IN - CAGetTotalLengthFromHeader");