]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - ao_write.c
ao_write: Fix spurious segfault.
[paraslash.git] / ao_write.c
index 730653c1b06844ed0822cc784c0c61b6a0303269..52c4b11e1a11c51a419bb32bbc58c6052c7221cd 100644 (file)
@@ -48,7 +48,14 @@ static void aow_close(struct writer_node *wn)
 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;
@@ -223,7 +230,9 @@ __noreturn static void *aow_play(void *priv)
                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);