From 7bcbe1689b9b414d5f857076b3af400d8d8e9b65 Mon Sep 17 00:00:00 2001 From: "Hongkuk, Son" Date: Thu, 30 Nov 2017 11:03:56 +0900 Subject: [PATCH] Update snapshot(2017-11-29) Signed-off-by: Hongkuk, Son Change-Id: Id4d682d07ae11ccff14f9548c930ce146df8cf85 --- packaging/snapshot_history.txt | 6 ++++ resource/csdk/connectivity/inc/catcpinterface.h | 6 ++++ .../connectivity/src/tcp_adapter/catcpadapter.c | 11 +++++- .../connectivity/src/tcp_adapter/catcpserver.c | 40 ++++++++++++++++++++-- 4 files changed, 59 insertions(+), 4 deletions(-) diff --git a/packaging/snapshot_history.txt b/packaging/snapshot_history.txt index 51607b8..ff3efe3 100755 --- a/packaging/snapshot_history.txt +++ b/packaging/snapshot_history.txt @@ -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 diff --git a/resource/csdk/connectivity/inc/catcpinterface.h b/resource/csdk/connectivity/inc/catcpinterface.h index 201dd26..dda95e5 100644 --- a/resource/csdk/connectivity/inc/catcpinterface.h +++ b/resource/csdk/connectivity/inc/catcpinterface.h @@ -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. * diff --git a/resource/csdk/connectivity/src/tcp_adapter/catcpadapter.c b/resource/csdk/connectivity/src/tcp_adapter/catcpadapter.c index ac6f6d7..165e3db 100644 --- a/resource/csdk/connectivity/src/tcp_adapter/catcpadapter.c +++ b/resource/csdk/connectivity/src/tcp_adapter/catcpadapter.c @@ -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; diff --git a/resource/csdk/connectivity/src/tcp_adapter/catcpserver.c b/resource/csdk/connectivity/src/tcp_adapter/catcpserver.c index 78b43bb..d998ad6 100644 --- a/resource/csdk/connectivity/src/tcp_adapter/catcpserver.c +++ b/resource/csdk/connectivity/src/tcp_adapter/catcpserver.c @@ -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"); -- 2.7.4