static void aow_pre_select(struct sched *s, struct task *t)
{
struct writer_node *wn = container_of(t, struct writer_node, task);
- int ret = btr_node_status(wn->btrn, wn->min_iqs, BTR_NT_LEAF);
+ struct private_aow_data *pawd = wn->private_data;
+ int ret;
+
+ if (pawd)
+ pthread_mutex_lock(&pawd->mutex);
+ ret = btr_node_status(wn->btrn, wn->min_iqs, BTR_NT_LEAF);
+ if (pawd)
+ pthread_mutex_unlock(&pawd->mutex);
if (ret == 0)
return;
ret = -E_AO_PLAY;
if (ao_play(pawd->dev, data, bytes) == 0) /* failure */
goto out;
+ pthread_mutex_lock(&pawd->mutex);
btr_consume(btrn, bytes);
+ pthread_mutex_unlock(&pawd->mutex);
}
unlock:
pthread_mutex_unlock(&pawd->mutex);