From 390515d40c115217d27be3f74c38d4d3eefde02b Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Sat, 25 Jan 2025 14:42:33 -0500 Subject: Discard packet_stream queue on demote - Cleanup some comments. Signed-off-by: Andrew Opalach --- src/liana/client.c | 2 +- src/liana/list.c | 5 +---- src/liana/list.h | 8 ++++---- src/liana/server.c | 15 ++++++++------- src/liana/vcr.c | 6 ++++-- 5 files changed, 18 insertions(+), 18 deletions(-) (limited to 'src/liana') diff --git a/src/liana/client.c b/src/liana/client.c index 09280cb..c847ac4 100644 --- a/src/liana/client.c +++ b/src/liana/client.c @@ -22,7 +22,7 @@ static void parse_info_packet(struct lia_client *client, struct nn_packet *packe str liana; nn_packet_read_str(packet, &liana); client->duration = nn_packet_read_u64(packet); - // TODO: This should be made into 2 steps. + // @TODO: This should be made into 2 steps. // 1. Collect all streams into an array // 2. Perform selection based on prefrences. bool have_audio = false; diff --git a/src/liana/list.c b/src/liana/list.c index 94ff3bf..db7d54c 100644 --- a/src/liana/list.c +++ b/src/liana/list.c @@ -301,9 +301,6 @@ static struct lia_list_entry *get_entry_from_id(struct lia_list *list, u32 id, s return NULL; } -// TODO: -//if (current->start != LIANA_TIMESTAMP_INVALID && current->start > ts - LIANA_BASE_PING) { - static bool handle_skipto(struct lia_list *list, s32 sequence, s32 index) { if (index == list->current) return true; @@ -844,7 +841,7 @@ void lia_list_clear(struct lia_list *list) void lia_list_close(struct lia_list *list) { - // TODO: Consider sinks being in use. Wait for list->sinks to be empty? + // @TODO: Consider sinks being in use. Wait for list->sinks to be empty? struct lia_list_entry *entry; al_array_foreach(list->entries, i, entry) { list->callback(list->userdata, LIANA_UNLOAD_ENTRY, entry, NULL); diff --git a/src/liana/list.h b/src/liana/list.h index e61074c..125dba6 100644 --- a/src/liana/list.h +++ b/src/liana/list.h @@ -16,10 +16,10 @@ //#define LIANA_LIST_SCUFFED_LOOP -// NOTE: To handle an entry being queued right before a skip, keep a global -// "max time until all sinks buffered" and used that instead of LIANA_PAUSE_DELAY (if greater). - -// TODO: Factor in LIANA_BASE_PING. +// @TODO: +// To handle an entry being queued right before a skip, keep a global +// "max time until all sinks buffered" and used that instead of LIANA_PAUSE_DELAY (if greater). +// Factor in LIANA_BASE_PING enum { LIANA_SINK_SET = 0, diff --git a/src/liana/server.c b/src/liana/server.c index 2e74d1e..04b5d96 100644 --- a/src/liana/server.c +++ b/src/liana/server.c @@ -1,5 +1,3 @@ -#include - #include "server.h" #include "handler.h" #include "handlers.h" @@ -101,7 +99,7 @@ static void free_connection_stream(struct lia_node_connection *conn) conn->ref = false; } -static void disable_connection(struct lia_node_connection *conn) +static void disable_connection_and_wait(struct lia_node_connection *conn) { nn_packet_pool_disable(&conn->pool); cch_handle_disable(&conn->handle); @@ -120,7 +118,7 @@ static void data_connection_closed_callback(void *userdata, struct nn_packet_str (void)stream; // We will never be here if init_thread() blocks or fails. - disable_connection(conn); + disable_connection_and_wait(conn); free_connection_stream(conn); @@ -209,7 +207,11 @@ static void packet_sent_callback(void *userdata, struct nn_packet *packet) static void demote_and_disconnect_stream(struct lia_server *server, struct nn_packet_stream *stream) { - // This connection is now nothing but a packet stream. + // Discard queue based on the currently set packet_sent_callback. + // This should always be the expected behavior but here it's mainly to + // not lose packets that belong to the packet pool. + nn_packet_stream_discard_queue(stream); + // This connection will now be nothing but a packet stream. stream->userdata = server; stream->connection_closed_callback = connection_closed_callback; stream->packet_callback = discard_packet_callback; @@ -322,13 +324,12 @@ static void packet_callback(void *userdata, struct nn_packet_stream *stream, str stream->connection_closed_callback = pre_init_connection_closed_callback; nn_thread_create(&conn->thread, init_thread, conn); } else { - // Connections never get removed from node->connection. if ((conn = get_connection_from_id(node, connection_id))) { if (conn->ref) { // Cleanup the existing connection's handler and demote it's stream. // The stream was likely already disconnected client-side but it's still safe // to disconnect it here to be sure. - disable_connection(conn); + disable_connection_and_wait(conn); demote_and_disconnect_stream(server, conn->stream); conn->ref = false; enable_connection(conn); diff --git a/src/liana/vcr.c b/src/liana/vcr.c index 33f3365..c6f6d93 100644 --- a/src/liana/vcr.c +++ b/src/liana/vcr.c @@ -378,8 +378,10 @@ void lia_vcr_close_all(struct lia_vcr *vcr) { struct lia_vcr_track *track; al_array_foreach(vcr->tracks, i, track) { - vcr_track_close_internal(track); - return_entire_cache(track); + if (VCR_TRACK_THREADED(track)) { + vcr_track_close_internal(track); + return_entire_cache(track); + } } vcr->started = false; #ifndef CAMU_DIRECT_MODE -- cgit v1.2.3-101-g0448