Improve ACLK data transmission (#21483)
Fix: Skip garbage-collected MQTT fragments during send processing
Stelios Fragkakis committed
Dec 18, 2025 at 19:30 UTC
49a77d5df793c9c01ecf32db29030876902c33fd
1 file changed
+7
-1
src/aclk/mqtt_websockets/mqtt_ng.c
+7
-1
@@ -2026,7 +2026,13 @@ static int mqtt_ng_next_to_send(struct mqtt_ng_client *client) {
2026
2027
struct buffer_fragment *frag = BUFFER_FIRST_FRAG(&client->main_buffer.hdr_buffer);
2028
while (frag) {
2029
- if ( frag->sent != frag->len )
2029
+ // Skip fragments marked for garbage collection - their data may have
2030
+ // been freed by mark_message_for_gc() after a timeout or ACK
2031
+ if (frag_is_marked_for_gc(frag)) {
2032
+ frag = frag->next;
2033
+ continue;
2034
+ }
2035
+ if (frag->sent != frag->len)
2036
break;
2037
frag = frag->next;
2038
}