diff --git a/client/SDL/SDL3/sdl_channels.cpp b/client/SDL/SDL3/sdl_channels.cpp index 2c600c76e..c6b482c07 100644 --- a/client/SDL/SDL3/sdl_channels.cpp +++ b/client/SDL/SDL3/sdl_channels.cpp @@ -70,6 +70,7 @@ void sdl_OnChannelDisconnectedEventHandler(void* context, const ChannelDisconnec { auto clip = reinterpret_cast(e->pInterface); WINPR_ASSERT(clip); + (void)sdl->clip.uninit(clip); clip->custom = nullptr; } else if (strcmp(e->name, DISP_DVC_CHANNEL_NAME) == 0) diff --git a/client/SDL/SDL3/sdl_freerdp.cpp b/client/SDL/SDL3/sdl_freerdp.cpp index fdd504047..72887058c 100644 --- a/client/SDL/SDL3/sdl_freerdp.cpp +++ b/client/SDL/SDL3/sdl_freerdp.cpp @@ -1161,10 +1161,6 @@ static void sdl_post_disconnect(freerdp* instance) auto sdl = get_context(instance->context); sdl->setConnected(false); - PubSub_UnsubscribeChannelConnected(instance->context->pubSub, - sdl_OnChannelConnectedEventHandler); - PubSub_UnsubscribeChannelDisconnected(instance->context->pubSub, - sdl_OnChannelDisconnectedEventHandler); gdi_free(instance); } @@ -1175,6 +1171,11 @@ static void sdl_post_final_disconnect(freerdp* instance) if (!instance->context) return; + + PubSub_UnsubscribeChannelConnected(instance->context->pubSub, + sdl_OnChannelConnectedEventHandler); + PubSub_UnsubscribeChannelDisconnected(instance->context->pubSub, + sdl_OnChannelDisconnectedEventHandler); } static void sdl_client_cleanup(SdlContext* sdl, int exit_code, const std::string& error_msg)