X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=write_common.c;h=acf1d292a4a33ed8ed7ef2649382c9a2c3f4a3e8;hp=d6472027ff018a89e390a6035884ee4520f5508d;hb=95ef8f79c9ae684e07568653b0c68ea669188e9f;hpb=9337bed6e84a4068e750fb6597646b45778eeba7 diff --git a/write_common.c b/write_common.c index d6472027..acf1d292 100644 --- a/write_common.c +++ b/write_common.c @@ -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;