From d9297879805a989c923e38c2bf286c0f6e907066 Mon Sep 17 00:00:00 2001 From: sourav bhuwalka Date: Wed, 9 Oct 2019 22:49:09 +0530 Subject: [PATCH] Crash in select When the system remains idle i.e. there is no exchange of data then poll would be called repeatedly very fast.some of the fields/parameters inside poll are not getting set/reset by kernel on calling repeatedly. So applying a sleep whenever poll gets timed out. https://github.sec.samsung.net/RS7-IOTIVITY/IoTivity/pull/585 (cherry-picked from 4cc2d76d5835a4ccb9d7a7569376e8d0938db264) Change-Id: I33dca282cdc9406d543b8f887bb8a5f576b7f4b3 Signed-off-by: sourav bhuwalka Signed-off-by: DoHyun Pyun --- resource/csdk/connectivity/src/tcp_adapter/catcpserver.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/resource/csdk/connectivity/src/tcp_adapter/catcpserver.c b/resource/csdk/connectivity/src/tcp_adapter/catcpserver.c index 40c076d..081775e 100644 --- a/resource/csdk/connectivity/src/tcp_adapter/catcpserver.c +++ b/resource/csdk/connectivity/src/tcp_adapter/catcpserver.c @@ -330,7 +330,6 @@ static void CAFindReadyMessage() } } oc_mutex_unlock(g_mutexObjectList); - int ret = poll(readFds, counter, timeout); oc_mutex_lock(g_mutexObjectList); @@ -347,6 +346,11 @@ static void CAFindReadyMessage() { CAPollReturned(readFds, counter); } + else if (ret == 0) + { + usleep(1000); /* some of the fields are not set by kernel on repeatedly calling + poll.Applying a timeout will solve this*/ + } else if (ret < 0) { OIC_LOG_V(FATAL, TAG, "poll error %s", strerror(errno)); -- 2.7.4