X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=write_common.c;h=5988faf77a5cd13f1b4e1930299b8c90073efc3d;hp=fb7f4775111009158cbb2ba4836caddbe6247697;hb=69a7e7aa11d8bf9b05d6431c57276befbc9b35a3;hpb=12123ab5a95a0f31385e9615d36056cb6546aced diff --git a/write_common.c b/write_common.c index fb7f4775..5988faf7 100644 --- a/write_common.c +++ b/write_common.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2010 Andre Noll + * Copyright (C) 2006-2011 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -73,18 +73,25 @@ void *check_writer_arg(const char *wa, int *writer_num) 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); @@ -150,7 +157,15 @@ static void get_btr_value(struct btr_node *btrn, const char *cmd, 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);