From bc1bbe61a874af5fa7d8d4a1ff29c36fbe1bdbeb Mon Sep 17 00:00:00 2001 From: Jakub Adam Date: Fri, 22 May 2015 09:29:16 +0200 Subject: [PATCH] shadow_client: dispose encomsp and remdesk Their threads were kept running after the client's exit. --- server/shadow/shadow_client.c | 4 ++++ server/shadow/shadow_encomsp.c | 7 +++++++ server/shadow/shadow_encomsp.h | 1 + server/shadow/shadow_remdesk.c | 8 ++++++++ server/shadow/shadow_remdesk.h | 1 + 5 files changed, 21 insertions(+) diff --git a/server/shadow/shadow_client.c b/server/shadow/shadow_client.c index 657d3f890..12f52866a 100644 --- a/server/shadow/shadow_client.c +++ b/server/shadow/shadow_client.c @@ -147,6 +147,10 @@ void shadow_client_context_free(freerdp_peer* peer, rdpShadowClient* client) shadow_encoder_free(client->encoder); client->encoder = NULL; } + + shadow_client_encomsp_uninit(client); + + shadow_client_remdesk_uninit(client); } void shadow_client_message_free(wMessage* message) diff --git a/server/shadow/shadow_encomsp.c b/server/shadow/shadow_encomsp.c index ad0be4870..61bb2e582 100644 --- a/server/shadow/shadow_encomsp.c +++ b/server/shadow/shadow_encomsp.c @@ -109,3 +109,10 @@ int shadow_client_encomsp_init(rdpShadowClient* client) return 1; } +void shadow_client_encomsp_uninit(rdpShadowClient* client) +{ + if (client->encomsp) { + client->encomsp->Stop(client->encomsp); + client->encomsp = NULL; + } +} diff --git a/server/shadow/shadow_encomsp.h b/server/shadow/shadow_encomsp.h index d7187b5cb..c154dc9ab 100644 --- a/server/shadow/shadow_encomsp.h +++ b/server/shadow/shadow_encomsp.h @@ -29,6 +29,7 @@ extern "C" { #endif int shadow_client_encomsp_init(rdpShadowClient* client); +void shadow_client_encomsp_uninit(rdpShadowClient* client); #ifdef __cplusplus } diff --git a/server/shadow/shadow_remdesk.c b/server/shadow/shadow_remdesk.c index 62af21729..5e7b27330 100644 --- a/server/shadow/shadow_remdesk.c +++ b/server/shadow/shadow_remdesk.c @@ -37,3 +37,11 @@ int shadow_client_remdesk_init(rdpShadowClient* client) return 1; } + +void shadow_client_remdesk_uninit(rdpShadowClient* client) +{ + if (client->remdesk) { + client->remdesk->Stop(client->remdesk); + client->remdesk = NULL; + } +} diff --git a/server/shadow/shadow_remdesk.h b/server/shadow/shadow_remdesk.h index f99a42d24..78779ab35 100644 --- a/server/shadow/shadow_remdesk.h +++ b/server/shadow/shadow_remdesk.h @@ -29,6 +29,7 @@ extern "C" { #endif int shadow_client_remdesk_init(rdpShadowClient* client); +void shadow_client_remdesk_uninit(rdpShadowClient* client); #ifdef __cplusplus }