X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=oss_write.c;h=687275f366f35fd914204c6c56722984a1ee68cd;hb=2ef39ae4d1e6b0d95991d2b980621fb152211444;hp=b82b3968baf214f3889cca805306438073e21ac6;hpb=f3b4f3298d2dffdb84a121b7d4aa561975f79be9;p=paraslash.git diff --git a/oss_write.c b/oss_write.c index b82b3968..687275f3 100644 --- a/oss_write.c +++ b/oss_write.c @@ -52,11 +52,11 @@ static void oss_pre_select(struct sched *s, struct task *t) struct private_oss_write_data *powd = wn->private_data; int ret = btr_node_status(wn->btrn, wn->min_iqs, BTR_NT_LEAF); - t->error = 0; - if (ret < 0) - sched_min_delay(s); - else if (ret > 0) - para_fd_set(powd->fd, &s->wfds, &s->max_fileno); + if (ret == 0) + return; + if (ret < 0 || powd->fd < 0) + return sched_min_delay(s); + para_fd_set(powd->fd, &s->wfds, &s->max_fileno); } static void oss_close(struct writer_node *wn) @@ -199,28 +199,21 @@ out: btr_remove_node(btrn); } -static int oss_open(struct writer_node *wn) +static void oss_open(struct writer_node *wn) { - struct private_oss_write_data *powd; + struct private_oss_write_data *powd = para_calloc(sizeof(*powd)); - powd = para_calloc(sizeof(*powd)); - wn->private_data = powd; powd->fd = -1; - return 1; + wn->private_data = powd; } -__malloc static void *oss_parse_config(const char *options) +__malloc static void *oss_parse_config_or_die(const char *options) { - int ret; struct oss_write_args_info *conf = para_calloc(sizeof(*conf)); - ret = oss_cmdline_parser_string(options, conf, "oss_write"); - if (ret) - goto err_out; + /* exits on errors */ + oss_cmdline_parser_string(options, conf, "oss_write"); return conf; -err_out: - free(conf); - return NULL; } static void oss_free_config(void *conf) @@ -244,7 +237,7 @@ void oss_write_init(struct writer *w) w->close = oss_close; w->pre_select = oss_pre_select; w->post_select = oss_post_select; - w->parse_config = oss_parse_config; + w->parse_config_or_die = oss_parse_config_or_die; w->free_config = oss_free_config; w->shutdown = NULL; w->help = (struct ggo_help) {