pack-objects: don't leak pack window reference when splitting packs
Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
538cf6b6e5
commit
59dd9ed183
@ -389,22 +389,28 @@ static unsigned long write_object(struct sha1file *f,
|
|||||||
dheader[pos] = ofs & 127;
|
dheader[pos] = ofs & 127;
|
||||||
while (ofs >>= 7)
|
while (ofs >>= 7)
|
||||||
dheader[--pos] = 128 | (--ofs & 127);
|
dheader[--pos] = 128 | (--ofs & 127);
|
||||||
if (limit && hdrlen + sizeof(dheader) - pos + datalen + 20 >= limit)
|
if (limit && hdrlen + sizeof(dheader) - pos + datalen + 20 >= limit) {
|
||||||
|
unuse_pack(&w_curs);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
sha1write(f, header, hdrlen);
|
sha1write(f, header, hdrlen);
|
||||||
sha1write(f, dheader + pos, sizeof(dheader) - pos);
|
sha1write(f, dheader + pos, sizeof(dheader) - pos);
|
||||||
hdrlen += sizeof(dheader) - pos;
|
hdrlen += sizeof(dheader) - pos;
|
||||||
reused_delta++;
|
reused_delta++;
|
||||||
} else if (type == OBJ_REF_DELTA) {
|
} else if (type == OBJ_REF_DELTA) {
|
||||||
if (limit && hdrlen + 20 + datalen + 20 >= limit)
|
if (limit && hdrlen + 20 + datalen + 20 >= limit) {
|
||||||
|
unuse_pack(&w_curs);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
sha1write(f, header, hdrlen);
|
sha1write(f, header, hdrlen);
|
||||||
sha1write(f, entry->delta->idx.sha1, 20);
|
sha1write(f, entry->delta->idx.sha1, 20);
|
||||||
hdrlen += 20;
|
hdrlen += 20;
|
||||||
reused_delta++;
|
reused_delta++;
|
||||||
} else {
|
} else {
|
||||||
if (limit && hdrlen + datalen + 20 >= limit)
|
if (limit && hdrlen + datalen + 20 >= limit) {
|
||||||
|
unuse_pack(&w_curs);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
sha1write(f, header, hdrlen);
|
sha1write(f, header, hdrlen);
|
||||||
}
|
}
|
||||||
copy_pack_data(f, p, &w_curs, offset, datalen);
|
copy_pack_data(f, p, &w_curs, offset, datalen);
|
||||||
|
Loading…
Reference in New Issue
Block a user