From: akallabeth Date: Tue, 19 May 2020 11:11:32 +0000 (+0200) Subject: Clear dynamic channel lists on disconnect. X-Git-Tag: 2.1.1^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ca246a6bfd3b085b61695f458b863f2d60e082c2;p=platform%2Fupstream%2Ffreerdp.git Clear dynamic channel lists on disconnect. (cherry picked from commit a1eb3e66b31579d3d878dee67913962140f75255) --- diff --git a/channels/drdynvc/client/drdynvc_main.c b/channels/drdynvc/client/drdynvc_main.c index 5ebd37d..eb5b418 100644 --- a/channels/drdynvc/client/drdynvc_main.c +++ b/channels/drdynvc/client/drdynvc_main.c @@ -381,10 +381,24 @@ static void dvcman_channel_free(void* arg) free(channel); } +static void dvcman_clear(drdynvcPlugin* drdynvc, IWTSVirtualChannelManager* pChannelMgr) +{ + DVCMAN* dvcman = (DVCMAN*)pChannelMgr; + + WINPR_UNUSED(drdynvc); + + ArrayList_Clear(dvcman->plugins); + ArrayList_Clear(dvcman->channels); + ArrayList_Clear(dvcman->plugin_names); + ArrayList_Clear(dvcman->listeners); +} + static void dvcman_free(drdynvcPlugin* drdynvc, IWTSVirtualChannelManager* pChannelMgr) { DVCMAN* dvcman = (DVCMAN*)pChannelMgr; + WINPR_UNUSED(drdynvc); + ArrayList_Free(dvcman->plugins); ArrayList_Free(dvcman->channels); ArrayList_Free(dvcman->plugin_names); @@ -473,7 +487,6 @@ static UINT dvcman_create_channel(drdynvcPlugin* drdynvc, IWTSVirtualChannelMana BOOL bAccept; DVCMAN_CHANNEL* channel; DrdynvcClientContext* context; - IWTSVirtualChannelCallback* pCallback; DVCMAN* dvcman = (DVCMAN*)pChannelMgr; UINT error; @@ -494,10 +507,10 @@ static UINT dvcman_create_channel(drdynvcPlugin* drdynvc, IWTSVirtualChannelMana if (strcmp(listener->channel_name, ChannelName) == 0) { + IWTSVirtualChannelCallback* pCallback = NULL; channel->iface.Write = dvcman_write_channel; channel->iface.Close = dvcman_close_channel_iface; bAccept = TRUE; - pCallback = NULL; if ((error = listener->listener_callback->OnNewChannelConnection( listener->listener_callback, &channel->iface, NULL, &bAccept, &pCallback)) == @@ -1547,6 +1560,8 @@ static UINT drdynvc_virtual_channel_event_disconnected(drdynvcPlugin* drdynvc) WTSErrorToString(status), status); } + dvcman_clear(drdynvc, drdynvc->channel_mgr); + MessageQueue_Clear(drdynvc->queue); drdynvc->OpenHandle = 0; if (drdynvc->data_in)