Merge pull request #3600 from matt335672/rfx_segv

Ignore Frame ACKs when the encoder is deleted
This commit is contained in:
matt335672
2025-10-21 12:02:27 +01:00
committed by GitHub
+22 -3
View File
@@ -1302,11 +1302,21 @@ xrdp_mm_egfx_caps_advertise(void *user, int caps_count,
static int
xrdp_mm_update_module_frame_ack(struct xrdp_mm *self)
{
int fif;
struct xrdp_encoder *encoder;
encoder = self->encoder;
fif = encoder->frames_in_flight;
if (encoder == NULL)
{
// Can't pass the ack to the encoder. Tell the module all
// frames are ACK'd
if (self->mod != NULL)
{
self->mod->mod_frame_ack(self->mod, 0, INT_MAX);
}
}
else
{
int fif = encoder->frames_in_flight;
if (encoder->frame_id_client + fif > encoder->frame_id_server)
{
if (encoder->frame_id_server > encoder->frame_id_server_sent)
@@ -1321,6 +1331,7 @@ xrdp_mm_update_module_frame_ack(struct xrdp_mm *self)
}
}
}
}
return 0;
}
@@ -3927,7 +3938,14 @@ xrdp_mm_frame_ack(struct xrdp_mm *self, int frame_id)
{
return 1;
}
encoder = self->encoder;
if ((encoder = self->encoder) == NULL)
{
/* No encoder - Possibly a late frame ack with a resize in progress */
LOG_DEVEL(LOG_LEVEL_INFO, "xrdp_mm_frame_ack: "
"Frame ack incoming %d with no encoder!", frame_id);
}
else
{
LOG_DEVEL(LOG_LEVEL_DEBUG, "xrdp_mm_frame_ack: "
"incoming %d, client %d, server %d", frame_id,
encoder->frame_id_client, encoder->frame_id_server);
@@ -3944,6 +3962,7 @@ xrdp_mm_frame_ack(struct xrdp_mm *self, int frame_id)
/* frame acks can come out of order so ignore older one */
encoder->frame_id_client = MAX(frame_id, encoder->frame_id_client);
}
}
xrdp_mm_update_module_frame_ack(self);
return 0;
}