From 4add7836fa8dcddaaaaf15abbd5bf0978b66fc75 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Mon, 29 Jan 2024 15:02:25 +0100 Subject: [PATCH] [server,shadow] wait for rdpegfx channel ready we need to wait until the capability messages are exchanged before starting to issue gfx commands --- include/freerdp/server/shadow.h | 1 + server/shadow/shadow_client.c | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/freerdp/server/shadow.h b/include/freerdp/server/shadow.h index 4702f8332..8b795a4ae 100644 --- a/include/freerdp/server/shadow.h +++ b/include/freerdp/server/shadow.h @@ -135,6 +135,7 @@ extern "C" BOOL resizeRequested; UINT32 resizeWidth; UINT32 resizeHeight; + BOOL areGfxCapsReady; }; struct rdp_shadow_server diff --git a/server/shadow/shadow_client.c b/server/shadow/shadow_client.c index e7d6b1614..5aaa55100 100644 --- a/server/shadow/shadow_client.c +++ b/server/shadow/shadow_client.c @@ -796,7 +796,9 @@ static UINT shadow_client_send_caps_confirm(RdpgfxServerContext* context, rdpSha WINPR_ASSERT(pdu); WINPR_ASSERT(context->CapsConfirm); - return context->CapsConfirm(context, pdu); + UINT rc = context->CapsConfirm(context, pdu); + client->areGfxCapsReady = (rc == CHANNEL_RC_OK); + return rc; } static BOOL shadow_client_caps_test_version(RdpgfxServerContext* context, rdpShadowClient* client, @@ -900,12 +902,11 @@ static UINT shadow_client_rdpgfx_caps_advertise(RdpgfxServerContext* context, BOOL h264 = FALSE; UINT32 flags = 0; - rdpShadowClient* client; WINPR_ASSERT(context); WINPR_ASSERT(capsAdvertise); - client = (rdpShadowClient*)context->custom; + rdpShadowClient* client = (rdpShadowClient*)context->custom; WINPR_ASSERT(client); WINPR_ASSERT(context->rdpcontext); @@ -1831,7 +1832,7 @@ static BOOL shadow_client_send_surface_update(rdpShadowClient* client, SHADOW_GF if (freerdp_settings_get_bool(settings, FreeRDP_SupportGraphicsPipeline)) { - if (pStatus->gfxOpened) + if (pStatus->gfxOpened && client->areGfxCapsReady) { /* GFX/h264 always full screen encoded */ nWidth = freerdp_settings_get_uint32(settings, FreeRDP_DesktopWidth);