Re: [PATCH v7 1/5] unpack-objects.c: add dry_run mode for get_data()
From: Jiang Xin <hidden>
Date: 2021-12-31 03:06:36
On Wed, Dec 22, 2021 at 2:33 AM Han Xin [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: Han Xin <redacted> In dry_run mode, "get_data()" is used to verify the inflation of data, and the returned buffer will not be used at all and will be freed immediately. Even in dry_run mode, it is dangerous to allocate a full-size buffer for a large blob object. Therefore, only allocate a low memory footprint when calling "get_data()" in dry_run mode. Suggested-by: Jiang Xin <redacted> Signed-off-by: Han Xin <redacted> --- builtin/unpack-objects.c | 23 +++++++++--- t/t5590-unpack-non-delta-objects.sh | 57 +++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 6 deletions(-) create mode 100755 t/t5590-unpack-non-delta-objects.shdiff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c index 4a9466295b..9104eb48da 100644 --- a/builtin/unpack-objects.c +++ b/builtin/unpack-objects.c@@ -96,15 +96,21 @@ static void use(int bytes) display_throughput(progress, consumed_bytes); } -static void *get_data(unsigned long size) +static void *get_data(size_t size, int dry_run)
After a offline talk with Han Xin, we feel it is not necessary to pass "dry_run" as a argument, use the file-scope static variable directly in "get_data()".
{
git_zstream stream;
- void *buf = xmallocz(size);
+ size_t bufsize;
+ void *buf;
memset(&stream, 0, sizeof(stream));
+ if (dry_run && size > 8192)Use the file-scope static variable "dry_run".