X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=buffer_tree.c;h=907bd812617900edfa9fb0882b7c3512d79b85e7;hb=85c25aaa851aa20aba167b0fa5c827d115079681;hp=45650a241d65efb3858ecbea737002e7725ffb10;hpb=d96c06ff93493c125b9f4d36655e77d7029ca309;p=paraslash.git diff --git a/buffer_tree.c b/buffer_tree.c index 45650a24..907bd812 100644 --- a/buffer_tree.c +++ b/buffer_tree.c @@ -854,7 +854,7 @@ static void merge_input_pool(struct btr_node *btrn, size_t dest_size) struct btr_buffer_reference *br, *wbr = NULL; int num_refs; /* including wrap buffer */ char *buf, *buf1 = NULL, *buf2 = NULL; - size_t sz, sz1 = 0, sz2 = 0, wsz; + size_t sz, sz1 = 0, sz2 = 0, wb_consumed = 0; br = get_first_input_br(btrn); if (!br || br_available_bytes(br) >= dest_size) @@ -871,6 +871,7 @@ static void merge_input_pool(struct btr_node *btrn, size_t dest_size) wbr = br; if (sz >= dest_size) return; + wb_consumed = br->consumed; continue; } if (!buf1) { @@ -890,7 +891,7 @@ static void merge_input_pool(struct btr_node *btrn, size_t dest_size) assert(buf2 + sz2 == buf); sz2 += sz; next: - if (sz1 + sz2 >= dest_size) + if (sz1 + sz2 >= dest_size + wb_consumed) break; } if (!buf2) /* nothing to do */ @@ -922,7 +923,6 @@ next: * We already have a wrap buffer, but it is too small. It might be * partially used. */ - wsz = br_available_bytes(wbr); if (wbr->wrap_count == sz1 && wbr->btrb->size >= sz1 + sz2) /* nothing we can do about it */ return; sz = sz1 + sz2 - wbr->btrb->size; /* amount of new data */