mirror of
https://github.com/FreeRDP/FreeRDP.git
synced 2025-06-03 00:00:20 +00:00
server: proxy: fix sync issue in gfx opening
This commit is contained in:
parent
8cf19fd94e
commit
09648834a0
@ -65,6 +65,8 @@ void pf_OnChannelConnectedEventHandler(void* data, ChannelConnectedEventArgs* e)
|
|||||||
else if (strcmp(e->name, RDPGFX_DVC_CHANNEL_NAME) == 0)
|
else if (strcmp(e->name, RDPGFX_DVC_CHANNEL_NAME) == 0)
|
||||||
{
|
{
|
||||||
pf_channels_wait_for_server_dynvc(ps);
|
pf_channels_wait_for_server_dynvc(ps);
|
||||||
|
pc->gfx_proxy = (RdpgfxClientContext*)e->pInterface;
|
||||||
|
pf_rdpgfx_pipeline_init(pc->gfx_proxy, ps->gfx, pc->pdata);
|
||||||
|
|
||||||
if (!ps->gfx->Open(ps->gfx))
|
if (!ps->gfx->Open(ps->gfx))
|
||||||
{
|
{
|
||||||
@ -72,8 +74,7 @@ void pf_OnChannelConnectedEventHandler(void* data, ChannelConnectedEventArgs* e)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pc->gfx_proxy = (RdpgfxClientContext*)e->pInterface;
|
SetEvent(pc->pdata->gfx_server_ready);
|
||||||
pf_rdpgfx_pipeline_init(pc->gfx_proxy, ps->gfx, pc->pdata);
|
|
||||||
}
|
}
|
||||||
else if (strcmp(e->name, DISP_DVC_CHANNEL_NAME) == 0)
|
else if (strcmp(e->name, DISP_DVC_CHANNEL_NAME) == 0)
|
||||||
{
|
{
|
||||||
|
@ -173,6 +173,12 @@ proxyData* proxy_data_new(void)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(pdata->gfx_server_ready = CreateEvent(NULL, TRUE, FALSE, NULL)))
|
||||||
|
{
|
||||||
|
proxy_data_free(pdata);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return pdata;
|
return pdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,6 +196,12 @@ void proxy_data_free(proxyData* pdata)
|
|||||||
pdata->client_thread = NULL;
|
pdata->client_thread = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pdata->gfx_server_ready)
|
||||||
|
{
|
||||||
|
CloseHandle(pdata->gfx_server_ready);
|
||||||
|
pdata->gfx_server_ready = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
free(pdata);
|
free(pdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,6 +103,7 @@ struct proxy_data
|
|||||||
|
|
||||||
HANDLE abort_event;
|
HANDLE abort_event;
|
||||||
HANDLE client_thread;
|
HANDLE client_thread;
|
||||||
|
HANDLE gfx_server_ready;
|
||||||
};
|
};
|
||||||
|
|
||||||
BOOL pf_context_copy_settings(rdpSettings* dst, const rdpSettings* src);
|
BOOL pf_context_copy_settings(rdpSettings* dst, const rdpSettings* src);
|
||||||
|
@ -362,6 +362,7 @@ static UINT pf_rdpgfx_map_surface_to_scaled_output(
|
|||||||
static UINT pf_rdpgfx_on_open(RdpgfxClientContext* context, BOOL* do_caps_advertise,
|
static UINT pf_rdpgfx_on_open(RdpgfxClientContext* context, BOOL* do_caps_advertise,
|
||||||
BOOL* send_frame_acks)
|
BOOL* send_frame_acks)
|
||||||
{
|
{
|
||||||
|
proxyData* pdata = (proxyData*)context->custom;
|
||||||
WLog_VRB(TAG, __FUNCTION__);
|
WLog_VRB(TAG, __FUNCTION__);
|
||||||
|
|
||||||
if (NULL != do_caps_advertise)
|
if (NULL != do_caps_advertise)
|
||||||
@ -370,6 +371,8 @@ static UINT pf_rdpgfx_on_open(RdpgfxClientContext* context, BOOL* do_caps_advert
|
|||||||
if (NULL != send_frame_acks)
|
if (NULL != send_frame_acks)
|
||||||
*send_frame_acks = FALSE;
|
*send_frame_acks = FALSE;
|
||||||
|
|
||||||
|
/* do not open the channel before gfx server side is in ready state */
|
||||||
|
WaitForSingleObject(pdata->gfx_server_ready, INFINITE);
|
||||||
return CHANNEL_RC_OK;
|
return CHANNEL_RC_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user