X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=write_common.c;h=b1ab00cfa97ca9c991396a76a4fc4964eb169232;hp=d6472027ff018a89e390a6035884ee4520f5508d;hb=9b2f06cbd27de4dd823d14f64b5609a693b6fbff;hpb=9337bed6e84a4068e750fb6597646b45778eeba7 diff --git a/write_common.c b/write_common.c index d6472027..b1ab00cf 100644 --- a/write_common.c +++ b/write_common.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006 Andre Noll + * Copyright (C) 2006-2007 Andre Noll * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -57,18 +57,26 @@ static void wng_post_select(struct sched *s, struct task *t) return; } if (!i) - min_written = t->ret; + min_written = wn->written; else - min_written = PARA_MIN(min_written, t->ret); + min_written = PARA_MIN(min_written, wn->written); + } +// PARA_INFO_LOG("loaded: %zd, min_written: %zd bytes\n", *g->loaded, min_written); + if (min_written) { + *g->loaded -= min_written; + FOR_EACH_WRITER_NODE(i, g) + g->writer_nodes[i].written -= min_written; } - *g->loaded -= min_written; if (!*g->loaded && *g->input_eof) { g->eof = 1; t->ret = -E_WNG_EOF; - } else - t->ret = 1; - if (*g->loaded && min_written) + return; + } + t->ret = 1; + if (*g->loaded && min_written) { +// PARA_INFO_LOG("moving %zd bytes\n", *g->loaded); memmove(g->buf, g->buf + min_written, *g->loaded); + } } int wng_open(struct writer_node_group *g) @@ -117,7 +125,6 @@ void wng_close(struct writer_node_group *g) struct writer_node *wn = &g->writer_nodes[i]; wn->writer->close(wn); } - free(g->written); free(g->writer_nodes); free(g); } @@ -128,7 +135,6 @@ struct writer_node_group *wng_new(unsigned num_writers) g->num_writers = num_writers; g->writer_nodes = para_calloc(num_writers * sizeof(struct writer_node)); - g->written = para_calloc(num_writers * sizeof(size_t)); g->task.private_data = g; g->task.post_select = wng_post_select; g->task.pre_select = wng_pre_select; @@ -143,7 +149,7 @@ void init_supported_writers(void) writers[i].init(&writers[i]); } -void *check_writer_arg(char *wa, int *writer_num) +void *check_writer_arg(const char *wa, int *writer_num) { int i;