Fixed potential crash issue on websocket disconnect stage 93/108293/2
authorkmook <kmook.choi@samsung.com>
Wed, 4 Jan 2017 04:01:47 +0000 (13:01 +0900)
committerKyoung-Mook Choi <kmook.choi@samsung.com>
Wed, 4 Jan 2017 04:02:08 +0000 (20:02 -0800)
Change-Id: If3277c220f3a3e3389ca701ebb11c021dec17529
Signed-off-by: kmook <kmook.choi@samsung.com>
msf_tizen_client/src/Channel.cpp

index a233859..66d716c 100755 (executable)
@@ -1055,9 +1055,6 @@ int Channel::callback_lws_mirror(struct lws *wsi,
                this_ptr->handleWsiDestroy();
                break;
 
-       case LWS_CALLBACK_GET_THREAD_ID:
-        return pthread_self();
-
        case LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED:
        case LWS_CALLBACK_ADD_POLL_FD:
        case LWS_CALLBACK_DEL_POLL_FD:
@@ -1073,6 +1070,7 @@ int Channel::callback_lws_mirror(struct lws *wsi,
        case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER:
        case LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION:
        case LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH:
+       case LWS_CALLBACK_GET_THREAD_ID:
                break;
 
        default:
@@ -1446,6 +1444,10 @@ void Channel::writeRequest()
        MSF_DBG("writeRequest start");
        if (wsi_mirror != NULL) {
                lws_callback_on_writable(wsi_mirror);
+               if (pthread_self() != socketThreadId) {
+                       MSF_DBG("current thread is different from websocket thread => lws_cancel_service()");
+                       lws_cancel_service(lws_get_context(wsi_mirror)); // to exit from poll() inside of lws_service()
+               }
        }
 }