From: Andre Noll Date: Sun, 5 Dec 2010 17:41:36 +0000 (+0100) Subject: Merge branch 't/writer_cleanups' X-Git-Tag: v0.4.5~4 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=877c179023ba45d481e9d89ac82fb0856617587b;hp=-c Merge branch 't/writer_cleanups' --- 877c179023ba45d481e9d89ac82fb0856617587b diff --combined write_common.c index 7131a940,be7f9c22..04db8ff0 --- a/write_common.c +++ b/write_common.c @@@ -66,27 -66,32 +66,32 @@@ void *check_writer_arg(const char *wa, c = wa[len]; if (c && c != ' ') continue; - if (c && !writers[i].parse_config) - return NULL; *writer_num = i; - return writers[i].parse_config(c? wa + len + 1 : ""); + return writers[i].parse_config_or_die(c? wa + len + 1 : ""); } PARA_ERROR_LOG("writer not found\n"); return NULL; } + /** + * Open a writer node and register the corresponding task. + * + * \param wn The writer node to open. + * \param parent The parent btr node (the source for the writer node). + * + * The configuration of the writer node stored in \p wn->conf must be + * initialized before this function may be called. + */ void register_writer_node(struct writer_node *wn, struct btr_node *parent) { struct writer *w = writers + wn->writer_num; char *name = make_message("%s writer", writer_names[wn->writer_num]); - int ret; wn->btrn = btr_new_node(&(struct btr_node_description) EMBRACE(.name = name, .parent = parent, .handler = w->execute, .context = wn)); strcpy(wn->task.status, name); free(name); - ret = w->open(wn); wn->task.post_select = w->post_select; wn->task.pre_select = w->pre_select; register_task(&wn->task); @@@ -115,7 -120,7 +120,7 @@@ int setup_writer_node(const char *arg, wn->conf = check_writer_arg(arg, &wn->writer_num); else { wn->writer_num = DEFAULT_WRITER; - wn->conf = writers[DEFAULT_WRITER].parse_config(""); + wn->conf = writers[DEFAULT_WRITER].parse_config_or_die(""); } if (!wn->conf) return -E_WRITE_COMMON_SYNTAX; @@@ -123,7 -128,6 +128,6 @@@ return 1; } - /** * Print the help text of all writers to stdout. * @@@ -153,15 -157,7 +157,15 @@@ static void get_btr_value(struct btr_no char *buf = NULL; int ret = btr_exec_up(btrn, cmd, &buf); - assert(ret >= 0); + if (ret < 0) { + /* + * This really should not happen. It means one of our parent + * nodes died unexpectedly. Proceed with fingers crossed. + */ + PARA_CRIT_LOG("cmd %s: %s\n", cmd, para_strerror(-ret)); + *result = 0; + return; + } ret = para_atoi32(buf, result); assert(ret >= 0); free(buf);