From 8c7fe93cc63ea2bbbe9b99ab4621381efab04d15 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Fri, 9 Feb 2018 10:39:46 +0100 Subject: [PATCH] Added client channel queue object free function. --- libfreerdp/core/client.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/libfreerdp/core/client.c b/libfreerdp/core/client.c index a65bc6a2b..64e71b6e9 100644 --- a/libfreerdp/core/client.c +++ b/libfreerdp/core/client.c @@ -76,6 +76,32 @@ static rdpMcsChannel* freerdp_channels_find_channel_by_name(rdpRdp* rdp, return NULL; } +static void channel_queue_free(void* obj) +{ + CHANNEL_OPEN_EVENT* ev; + wMessage* msg = (wMessage*)obj; + + if (!msg || (msg->id != 0)) + return; + + ev = (CHANNEL_OPEN_EVENT*)msg->wParam; + + if (ev) + { + /* Added by FreeRDP_VirtualChannelWriteEx */ + if (ev->UserData) + { + wStream* s = (wStream*)ev->UserData; + Stream_Free(s, TRUE); + } + /* Either has no data or added by FreeRDP_VirtualChannelWrite */ + else + free(ev->Data); + + free(ev); + } +} + rdpChannels* freerdp_channels_new(freerdp* instance) { rdpChannels* channels; @@ -93,6 +119,7 @@ rdpChannels* freerdp_channels_new(freerdp* instance) if (!channels->queue) goto error; + channels->queue->object.fnObjectFree = channel_queue_free; channels->openHandles = HashTable_New(TRUE); if (!channels->openHandles)