snd_pcm_sframes_t frames;
int ret;
+ ret = task_get_notification(t);
+ if (ret < 0)
+ goto err;
again:
- t->error = 0;
ret = btr_node_status(btrn, wn->min_iqs, BTR_NT_LEAF);
if (ret == 0)
return;
char *buf;
size_t bytes;
- t->error = 0;
+ ret = task_get_notification(t);
+ if (ret < 0)
+ goto out;
ret = btr_node_status(btrn, wn->min_iqs, BTR_NT_LEAF);
if (ret <= 0)
goto out;
struct private_oss_write_data *powd = wn->private_data;
struct btr_node *btrn = wn->btrn;
size_t frames, bytes;
- int ret = btr_node_status(btrn, wn->min_iqs, BTR_NT_LEAF);
+ int ret;
char *data;
+ ret = task_get_notification(t);
if (ret < 0)
goto out;
- if (ret == 0)
- return;
+ ret = btr_node_status(btrn, wn->min_iqs, BTR_NT_LEAF);
+ if (ret <= 0)
+ goto out;
if (!powd) {
int32_t rate, ch, format;
get_btr_sample_rate(btrn, &rate);
struct btr_node *btrn = wn->btrn;
int ret;
+ ret = task_get_notification(t);
+ if (ret < 0)
+ goto fail;
if (!powd) {
ret = btr_node_status(btrn, wn->min_iqs, BTR_NT_LEAF);
if (ret == 0)
return;
if (ret < 0)
- goto remove_btrn;
+ goto fail;
ret = core_audio_init(wn);
if (ret < 0)
- goto remove_btrn;
+ goto fail;
powd = wn->private_data;
AudioOutputUnitStart(powd->audio_unit);
}
if (ret < 0 && need_drain_delay(powd))
ret = 0;
mutex_unlock(powd->mutex);
-
if (ret >= 0)
- goto out;
- AudioOutputUnitStop(powd->audio_unit);
- AudioUnitUninitialize(powd->audio_unit);
- CloseComponent(powd->audio_unit);
- btr_remove_node(&powd->callback_btrn);
-remove_btrn:
+ return;
+fail:
+ assert(ret < 0);
+ if (powd && powd->callback_btrn) {
+ AudioOutputUnitStop(powd->audio_unit);
+ AudioUnitUninitialize(powd->audio_unit);
+ CloseComponent(powd->audio_unit);
+ btr_remove_node(&powd->callback_btrn);
+ }
btr_remove_node(&wn->btrn);
PARA_NOTICE_LOG("%s\n", para_strerror(-ret));
-out:
t->error = ret;
}