Commit ad15ca71 authored by Max Kellermann's avatar Max Kellermann

DecoderControl: take ownership of client_cond

Don't let the "client" pass its own GCond. This was not used consistently.
parent 53117ac2
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#define G_LOG_DOMAIN "decoder_control" #define G_LOG_DOMAIN "decoder_control"
struct decoder_control * struct decoder_control *
dc_new(GCond *client_cond) dc_new()
{ {
struct decoder_control *dc = g_new(struct decoder_control, 1); struct decoder_control *dc = g_new(struct decoder_control, 1);
...@@ -36,7 +36,7 @@ dc_new(GCond *client_cond) ...@@ -36,7 +36,7 @@ dc_new(GCond *client_cond)
dc->mutex = g_mutex_new(); dc->mutex = g_mutex_new();
dc->cond = g_cond_new(); dc->cond = g_cond_new();
dc->client_cond = client_cond; dc->client_cond = g_cond_new();
dc->state = DECODE_STATE_STOP; dc->state = DECODE_STATE_STOP;
dc->command = DECODE_COMMAND_NONE; dc->command = DECODE_COMMAND_NONE;
...@@ -60,6 +60,7 @@ dc_free(struct decoder_control *dc) ...@@ -60,6 +60,7 @@ dc_free(struct decoder_control *dc)
if (dc->song != NULL) if (dc->song != NULL)
song_free(dc->song); song_free(dc->song);
g_cond_free(dc->client_cond);
g_cond_free(dc->cond); g_cond_free(dc->cond);
g_mutex_free(dc->mutex); g_mutex_free(dc->mutex);
g_free(dc->mixramp_start); g_free(dc->mixramp_start);
......
...@@ -133,7 +133,7 @@ struct decoder_control { ...@@ -133,7 +133,7 @@ struct decoder_control {
G_GNUC_MALLOC G_GNUC_MALLOC
struct decoder_control * struct decoder_control *
dc_new(GCond *client_cond); dc_new();
void void
dc_free(struct decoder_control *dc); dc_free(struct decoder_control *dc);
......
...@@ -61,15 +61,15 @@ player_control::~player_control() ...@@ -61,15 +61,15 @@ player_control::~player_control()
} }
void void
player_wait_decoder(struct player_control *pc, struct decoder_control *dc) player_wait_decoder(gcc_unused struct player_control *pc,
struct decoder_control *dc)
{ {
assert(pc != NULL); assert(pc != NULL);
assert(dc != NULL); assert(dc != NULL);
assert(dc->client_cond == pc->cond);
/* during this function, the decoder lock is held, because /* during this function, the decoder lock is held, because
we're waiting for the decoder thread */ we're waiting for the decoder thread */
g_cond_wait(pc->cond, dc->mutex); g_cond_wait(dc->client_cond, dc->mutex);
} }
static void static void
......
...@@ -1096,7 +1096,7 @@ player_task(gpointer arg) ...@@ -1096,7 +1096,7 @@ player_task(gpointer arg)
{ {
struct player_control *pc = (struct player_control *)arg; struct player_control *pc = (struct player_control *)arg;
struct decoder_control *dc = dc_new(pc->cond); struct decoder_control *dc = dc_new();
decoder_thread_start(dc); decoder_thread_start(dc);
player_buffer = music_buffer_new(pc->buffer_chunks); player_buffer = music_buffer_new(pc->buffer_chunks);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment