return ret;
}
-__malloc static void *osx_write_parse_config_or_die(const char *options)
+__malloc static void *osx_write_parse_config_or_die(int argc, char **argv)
{
struct osx_write_args_info *conf = para_calloc(sizeof(*conf));
/* exits on errors */
- osx_cmdline_parser_string(options, conf, "osx_write");
+ osx_write_cmdline_parser(argc, argv, conf);
return conf;
}
static void osx_free_config(void *conf)
{
- osx_cmdline_parser_free(conf);
+ osx_write_cmdline_parser_free(conf);
}
static void osx_write_close(struct writer_node *wn)
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;
}
{
struct osx_write_args_info dummy;
- osx_cmdline_parser_init(&dummy);
+ osx_write_cmdline_parser_init(&dummy);
w->close = osx_write_close;
w->pre_select = osx_write_pre_select;
w->post_select = osx_write_post_select;
.short_help = osx_write_args_info_help,
.detailed_help = osx_write_args_info_detailed_help
};
- osx_cmdline_parser_free(&dummy);
+ osx_write_cmdline_parser_free(&dummy);
}