From 973a4c30b8d690dd823730612604381d246d33e2 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Mon, 9 Apr 2018 11:09:56 +0200 Subject: [PATCH] Fixed channel duplicate disconnect handling --- channels/drdynvc/client/drdynvc_main.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/channels/drdynvc/client/drdynvc_main.c b/channels/drdynvc/client/drdynvc_main.c index e7314ca..9bb17f7 100644 --- a/channels/drdynvc/client/drdynvc_main.c +++ b/channels/drdynvc/client/drdynvc_main.c @@ -713,9 +713,11 @@ static UINT drdynvc_send(drdynvcPlugin* drdynvc, wStream* s) { case CHANNEL_RC_OK: return CHANNEL_RC_OK; + case CHANNEL_RC_NOT_CONNECTED: Stream_Free(s, TRUE); return CHANNEL_RC_OK; + case CHANNEL_RC_BAD_CHANNEL_HANDLE: Stream_Free(s, TRUE); WLog_ERR(TAG, "VirtualChannelWriteEx failed with CHANNEL_RC_BAD_CHANNEL_HANDLE"); @@ -1380,7 +1382,8 @@ static UINT drdynvc_virtual_channel_event_connected(drdynvcPlugin* drdynvc, LPVO drdynvc->state = DRDYNVC_STATE_CAPABILITIES; - if (!(drdynvc->thread = CreateThread(NULL, 0, drdynvc_virtual_channel_client_thread, (void*) drdynvc, + if (!(drdynvc->thread = CreateThread(NULL, 0, drdynvc_virtual_channel_client_thread, + (void*) drdynvc, 0, NULL))) { error = ERROR_INTERNAL_ERROR; @@ -1401,6 +1404,9 @@ static UINT drdynvc_virtual_channel_event_disconnected(drdynvcPlugin* drdynvc) { UINT status; + if (drdynvc->OpenHandle == 0) + return CHANNEL_RC_OK; + if (!drdynvc) return CHANNEL_RC_BAD_CHANNEL_HANDLE; -- 2.7.4