X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=file_writer.c;fp=file_writer.c;h=1ea9503297eb8c8755b56293bfc5aa8b5ade1994;hp=4a2e04810fcc9355882c8e0fffd7ef2478a2b820;hb=b680e18c069fef1a03b83a5f906c994e1ab063a1;hpb=9337bed6e84a4068e750fb6597646b45778eeba7 diff --git a/file_writer.c b/file_writer.c index 4a2e0481..1ea95032 100644 --- a/file_writer.c +++ b/file_writer.c @@ -87,19 +87,21 @@ static int file_writer_post_select(struct sched *s, struct writer_node *wn) { struct private_file_writer_data *pfwd = wn->private_data; struct writer_node_group *wng = wn->wng; - int ret = 0; + int ret; if (!pfwd->check_fd) - return 0; - if (!*wng->loaded) - return 0; + return 1; + if (*wng->loaded <= wn->written) + return 1; if (!FD_ISSET(pfwd->fd, &s->wfds)) - return 0; + return 1; // PARA_INFO_LOG("writing %zd\n", *wng->loaded); - ret = write(pfwd->fd, wng->buf, *wng->loaded); + ret = write(pfwd->fd, wng->buf + wn->written, + *wng->loaded - wn->written); if (ret < 0) - ret = -E_FW_WRITE; - return ret; + return -E_FW_WRITE; + wn->written += ret; + return 1; } static void file_writer_close(struct writer_node *wn)