Skip to content

Commit 44760c9

Browse files
Use soft reset instead of full clear when closing data streams
Preserve the handler registration when a stream ends or overflows so the slot can receive subsequent streams on the same topic without re-registering.
1 parent d115389 commit 44760c9

1 file changed

Lines changed: 12 additions & 2 deletions

File tree

components/livekit/core/data_stream_manager.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ static void clear_descriptor(data_stream_descriptor_t *desc)
4242
memset(desc, 0, sizeof(data_stream_descriptor_t));
4343
}
4444

45+
static void reset_stream_state(data_stream_descriptor_t *desc)
46+
{
47+
desc->active = false;
48+
desc->stream_id[0] = '\0';
49+
desc->next_chunk_index = 0;
50+
desc->bytes_processed = 0;
51+
desc->total_length = 0;
52+
desc->has_total_length = false;
53+
}
54+
4555
static data_stream_descriptor_t* find_empty_slot(data_stream_manager_t *mgr)
4656
{
4757
for (int i = 0; i < CONFIG_LK_MAX_DATA_STREAMS; i++) {
@@ -199,7 +209,7 @@ data_stream_manager_err_t data_stream_manager_handle_chunk(data_stream_manager_h
199209

200210
if (desc->has_total_length && desc->bytes_processed > desc->total_length) {
201211
ESP_LOGE(TAG, "Stream %s exceeded total_length", chunk->stream_id);
202-
clear_descriptor(desc);
212+
reset_stream_state(desc);
203213
return DATA_STREAM_MANAGER_ERR_NONE;
204214
}
205215

@@ -239,6 +249,6 @@ data_stream_manager_err_t data_stream_manager_handle_trailer(data_stream_manager
239249
desc->handler.on_close(&trailer_info, desc->handler.ctx);
240250
}
241251

242-
clear_descriptor(desc);
252+
reset_stream_state(desc);
243253
return DATA_STREAM_MANAGER_ERR_NONE;
244254
}

0 commit comments

Comments
 (0)