From 359077e8d3a65e45d25faaa9e38135aaeaa42ef3 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Wed, 15 Feb 2017 15:34:12 +0100 Subject: [PATCH] Closing dynamic channels on shutdown. --- channels/drdynvc/client/drdynvc_main.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/channels/drdynvc/client/drdynvc_main.c b/channels/drdynvc/client/drdynvc_main.c index 579f0a536..acf873c07 100644 --- a/channels/drdynvc/client/drdynvc_main.c +++ b/channels/drdynvc/client/drdynvc_main.c @@ -1269,6 +1269,21 @@ static void* drdynvc_virtual_channel_client_thread(void* arg) } } + { + /* Disconnect remaining dynamic channels that the server did not. + * This is required to properly shut down channels by calling the appropriate + * event handlers. */ + DVCMAN* drdynvcMgr = (DVCMAN*)drdynvc->channel_mgr; + + while (ArrayList_Count(drdynvcMgr->channels) > 0) + { + IWTSVirtualChannel* channel = (IWTSVirtualChannel*) + ArrayList_GetItem(drdynvcMgr->channels, 0); + const UINT32 ChannelId = drdynvc->channel_mgr->GetChannelId(channel); + dvcman_close_channel(drdynvc->channel_mgr, ChannelId); + } + } + if (error && drdynvc->rdpcontext) setChannelError(drdynvc->rdpcontext, error, "drdynvc_virtual_channel_client_thread reported an error");