[btr]: Avoid large memcpy()s when creating the wrap buffers.
[paraslash.git] / buffer_tree.c
index 8aa66b6c7efce8a51e37ab2b52f4102f074d936d..dfecf10a24906f2e165ed9368f69c23e99f6e291 100644 (file)
@@ -622,11 +622,16 @@ next:
                if (sz1 + sz2 >= dest_size)
                        break;
        }
+       /*
+        * If the second buffer is large, we only take the first part of it to
+        * avoid having to memcpy() huge buffers.
+        */
+       sz2 = PARA_MIN(sz2, (size_t)(64 * 1024));
        if (!wbr) {
                assert(buf1);
                if (!buf2) /* nothing to do */
                        return;
-               /* make a new wrap buffer combining buf1 and buf 2. */
+               /* Make a new wrap buffer combining buf1 and buf2. */
                sz = sz1 + sz2;
                buf = para_malloc(sz);
                PARA_DEBUG_LOG("merging input buffers: (%p:%zu, %p:%zu) -> %p:%zu\n",