{
int i;
struct writer_node *wn = cb_arg;
- struct private_osx_write_data *powd = wn->private_data;
+ struct private_osx_write_data *powd;
size_t samples_have, samples_want = 0;
+ powd = wn->private_data;
mutex_lock(powd->mutex);
+ powd = wn->private_data;
+ if (!powd || !wn->btrn)
+ goto out;
/*
* We fill with zeros if no data was yet written and we do not have
* enough to fill all buffers.
btr_pushdown(btrn);
if (ret < 0 && need_drain_delay(powd))
ret = 0;
- mutex_unlock(powd->mutex);
-
- if (ret >= 0)
- goto out;
+ if (ret >= 0) {
+ mutex_unlock(powd->mutex);
+ return;
+ }
AudioOutputUnitStop(powd->audio_unit);
AudioUnitUninitialize(powd->audio_unit);
CloseComponent(powd->audio_unit);
btr_remove_node(&powd->callback_btrn);
+ mutex_unlock(powd->mutex);
remove_btrn:
btr_remove_node(&wn->btrn);
PARA_NOTICE_LOG("%s\n", para_strerror(-ret));
-out:
t->error = ret;
}