diff options
| author | 2025-04-25 15:56:56 -0400 | |
|---|---|---|
| committer | 2025-04-25 15:56:56 -0400 | |
| commit | b1985414e54edf1eebe597551a48609ad08c6cfa (patch) | |
| tree | 4a4def499348e0c9ccb52472e7c862f814993931 /src/libsink | |
| parent | 76fc9fe33dd58926e552b6bd3b79d798b452c6ed (diff) | |
| download | camu-b1985414e54edf1eebe597551a48609ad08c6cfa.tar.gz camu-b1985414e54edf1eebe597551a48609ad08c6cfa.tar.bz2 camu-b1985414e54edf1eebe597551a48609ad08c6cfa.zip | |
Partial cmc ui refactor
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/libsink')
| -rw-r--r-- | src/libsink/sink.c | 11 |
1 files changed, 6 insertions, 5 deletions
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) { |