From: Hongkuk, Son Date: Thu, 30 Nov 2017 02:03:56 +0000 (+0900) Subject: Update snapshot(2017-11-29) X-Git-Tag: accepted/tizen/unified/20171130.113340^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7bcbe1689b9b414d5f857076b3af400d8d8e9b65;hp=29a0ee24ae92c50aec75e2427172cac14354e8ef;p=platform%2Fupstream%2Fiotivity.git Update snapshot(2017-11-29) Signed-off-by: Hongkuk, Son Change-Id: Id4d682d07ae11ccff14f9548c930ce146df8cf85 --- 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");