From b1985414e54edf1eebe597551a48609ad08c6cfa Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Fri, 25 Apr 2025 15:56:56 -0400 Subject: Partial cmc ui refactor Signed-off-by: Andrew Opalach --- src/libsink/sink.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/libsink') diff --git a/src/libsink/sink.c b/src/libsink/sink.c index 2b9d585..b9b3aa6 100644 --- a/src/libsink/sink.c +++ b/src/libsink/sink.c @@ -1278,9 +1278,7 @@ static struct camu_sink_entry *get_entry_from_id(struct camu_sink *sink, u32 id) { struct camu_sink_entry *entry; al_array_foreach(sink->entries, i, entry) { - if (entry->id == id) { - return entry; - } + if (entry->id == id) return entry; } return NULL; } @@ -1291,10 +1289,9 @@ static bool set_command_callback(void *userdata, struct nn_rpc_connection *conn, struct camu_sink *sink = (struct camu_sink *)userdata; (void)rpacket; - nn_mutex_lock(&sink->lock); - u8 op = nn_packet_read_u8(packet); if (op == LIANA_SINK_UNSET) { + nn_mutex_lock(&sink->lock); if (sink->current) { queue_cmd(sink, (struct camu_sink_cmd){ .op = EJECT_ENTRY, @@ -1333,6 +1330,10 @@ static bool set_command_callback(void *userdata, struct nn_rpc_connection *conn, lia_client_connect(&entry->client, sink->loop, sink->type, &addr, port, node_id, seek_pos); } + // Don't lock before calling client_connect() or we could deadlock in + // CLIENT_CLOSED on a failed socket_connect(). + nn_mutex_lock(&sink->lock); + if (op == LIANA_SINK_BUFFER) { goto out; } else if (op == LIANA_SINK_BUFFER_AND_QUEUE) { -- cgit v1.2.3-101-g0448