From 255fab201a6ccbe6e99befad1abe964b37f8193f Mon Sep 17 00:00:00 2001 From: kubistika Date: Tue, 28 May 2019 16:10:04 +0300 Subject: [PATCH] server/proxy: Fix rdpgfx and events leak --- server/proxy/pf_context.c | 18 ++++++++++++++++-- server/proxy/pf_server.c | 5 ++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/server/proxy/pf_context.c b/server/proxy/pf_context.c index 1169e77..05ee2d2 100644 --- a/server/proxy/pf_context.c +++ b/server/proxy/pf_context.c @@ -44,8 +44,16 @@ static void client_to_proxy_context_free(freerdp_peer* client, { WINPR_UNUSED(client); - if (context) - WTSCloseServer((HANDLE) context->vcm); + if (!context) + return; + + WTSCloseServer((HANDLE) context->vcm); + + if (context->dynvcReady) + { + CloseHandle(context->dynvcReady); + context->dynvcReady = NULL; + } } BOOL init_p_server_context(freerdp_peer* client) @@ -172,5 +180,11 @@ out_fail: void proxy_data_free(proxyData* pdata) { connection_info_free(pdata->info); + if (pdata->connectionClosed) + { + CloseHandle(pdata->connectionClosed); + pdata->connectionClosed = NULL; + } + free(pdata); } diff --git a/server/proxy/pf_server.c b/server/proxy/pf_server.c index bef3f1b..8cb9f3b 100644 --- a/server/proxy/pf_server.c +++ b/server/proxy/pf_server.c @@ -366,12 +366,15 @@ fail: disp_server_context_free(ps->disp); } + if (ps->gfx) + rdpgfx_server_context_free(ps->gfx); + if (client->connected && !pf_common_connection_aborted_by_peer(pdata)) { pf_server_handle_client_disconnection(client); } - pc = (rdpContext*)pdata->pc; + pc = (rdpContext*) pdata->pc; freerdp_client_stop(pc); proxy_data_free(pdata); freerdp_client_context_free(pc); -- 2.7.4