summaryrefslogtreecommitdiff
path: root/src/liana
diff options
context:
space:
mode:
Diffstat (limited to 'src/liana')
-rw-r--r--src/liana/client.c2
-rw-r--r--src/liana/list.c5
-rw-r--r--src/liana/list.h8
-rw-r--r--src/liana/server.c15
-rw-r--r--src/liana/vcr.c6
5 files changed, 18 insertions, 18 deletions
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 <al/random.h>
-
#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