DecoderControl: take ownership of client_cond
Don't let the "client" pass its own GCond. This was not used consistently.
This commit is contained in:
@@ -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)
|
|||||||
|
|
||||||
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)
|
|||||||
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 {
|
|||||||
|
|
||||||
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()
|
|||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|||||||
{
|
{
|
||||||
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);
|
||||||
|
Reference in New Issue
Block a user