summaryrefslogtreecommitdiff
path: root/src/liana
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-04-30 17:42:08 -0400
committerAndrew Opalach <andrew@akon.city> 2025-04-30 17:42:08 -0400
commit2ce402fa41508d45e2d30b56502c00ef92efff7b (patch)
tree63f4701b292dfcbe08af1aeb3a5942c1973c45ba /src/liana
parentaf54e6510f2f701db3b3a533514076c04cea4c66 (diff)
downloadcamu-2ce402fa41508d45e2d30b56502c00ef92efff7b.tar.gz
camu-2ce402fa41508d45e2d30b56502c00ef92efff7b.tar.bz2
camu-2ce402fa41508d45e2d30b56502c00ef92efff7b.zip
Refactor the way cache backing sizes are tracked
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/liana')
-rw-r--r--src/liana/handlers/codec_client.c2
-rw-r--r--src/liana/server.c11
-rw-r--r--src/liana/vcr.c11
3 files changed, 13 insertions, 11 deletions
diff --git a/src/liana/handlers/codec_client.c b/src/liana/handlers/codec_client.c
index 39bb2d1..fd2569b 100644
--- a/src/liana/handlers/codec_client.c
+++ b/src/liana/handlers/codec_client.c
@@ -141,7 +141,7 @@ static bool codec_client_handle_packet(struct lia_client_handler *handler, struc
packet->rindex = rindex;
if (!success) {
- // Forcing in EOF on an error is not necessary but should exhibit less erratic behavior sink-side.
+ // Forcing in an EOF on an error is not necessary but behaves better in the sink.
codec->handler.callback(codec->handler.userdata, LIANA_CLIENT_EOF, codec->handler.stream, NULL);
return false;
}
diff --git a/src/liana/server.c b/src/liana/server.c
index 3670607..acb5f31 100644
--- a/src/liana/server.c
+++ b/src/liana/server.c
@@ -152,12 +152,9 @@ static void data_connection_closed_callback(void *userdata, struct nn_packet_str
{
struct lia_node_connection *conn = (struct lia_node_connection *)userdata;
(void)stream;
-
// We will never be here if init_thread() blocks or fails.
disable_connection_and_wait(conn);
-
free_connection_stream(conn);
-
if (conn->disconnected) {
free_connection(conn);
} else {
@@ -448,8 +445,11 @@ static void duration_signal_callback(void *userdata)
node->handler->free(&node->handler);
bool got_visual_data = false;
struct lia_visual_data visual_data;
- //cch_handle_seek(&node->handle, 0, SEEK_SET);
- //got_visual_data = lia_prepare_visual_data(&node->handle, &visual_data);
+#if 0 // @TODO: This is obviously bad because it blocks the event loop.
+ // Evaluate this when getting around to http/hls stream fixes.
+ cch_handle_seek(&node->handle, 0, SEEK_SET);
+ got_visual_data = lia_prepare_visual_data(&node->handle, &visual_data);
+#endif
cch_entry_return_handle(node->entry, &node->handle);
if (should_free_node(node)) {
free_node(node);
@@ -516,7 +516,6 @@ void lia_server_free(struct lia_server *server)
al_free(node);
}
al_array_free(server->nodes);
-
al_assert(!server->dormant_connections.count);
al_array_free(server->dormant_connections);
}
diff --git a/src/liana/vcr.c b/src/liana/vcr.c
index 4e176e7..4500681 100644
--- a/src/liana/vcr.c
+++ b/src/liana/vcr.c
@@ -104,6 +104,7 @@ static nn_thread_result NNWT_THREADCALL vcr_track_thread(void *userdata)
// NULL packet means flush.
bool success = track->client->handle_packet(track->client, packet);
if (!success) {
+ // In the case of codec_client, an EOF will be sent on an error.
log_error("Error handling packet, exiting track thread.");
return_entire_cache(track);
track->cache.disabled = true;
@@ -290,16 +291,18 @@ void lia_vcr_push_packet(struct lia_vcr *vcr, struct nn_packet *packet)
break;
}
case LIANA_PACKET_EOF:
+ case LIANA_PACKET_ERROR:
al_array_foreach(vcr->tracks, i, track) {
nn_packet_cache_send_packet(&track->cache, NULL);
}
#ifndef CAMU_DIRECT_MODE
nn_signal_stop(&vcr->signal);
#endif
- log_debug("Received EOF.");
- break;
- case LIANA_PACKET_ERROR:
- log_warn("Unhandled error packet.");
+ if (op == LIANA_PACKET_EOF) {
+ log_debug("Received EOF.");
+ } else if (op == LIANA_PACKET_ERROR) {
+ log_warn("Forcing EOF because we got an error packet.");
+ }
break;
default:
log_warn("Erroneous packet.");