Thread (1 message) 1 message, 1 author, 2016-06-15

Re: [PATCH] index-pack: correctly initialize appended objects

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:45:02
Subsystem: the rest · Maintainer: Linus Torvalds

Possibly related (same subject, not in this thread)

Nicolas Pitre [off-list ref] writes:
On Fri, 25 Jul 2008, Johannes Schindelin wrote:
quoted
Hi,

On Thu, 24 Jul 2008, Junio C Hamano wrote:
quoted
The function does not seem to use type (which the patch is also setting) 
nor real_type (which the patch does not set).

However, the code checks objects[nth].real_type all over the place in 
the code.  Doesn't the lack of real_type assignment in 
append_obj_to_pack() affect them in any way?
quoted
From staring at the code, I thought that real_type was set in 
resolve_delta(), but I may be wrong.

The safer thing would be to set it, but I am not quite sure if we can use 
"type" directly, or if type can be "delta" for an object that is used to 
complete the pack, and therefore stored as a non-delta.
Objects to complete the pack are always non delta, so the type and 
real_type should be the same.  However that shouldn't matter since at 
that point the object array is not walked anymore, at least not for 
appended objects, and therefore initializing the type at that point is 
redundant.
Thanks.  Here is what I committed.

commit 72de2883bd7d4ceda05f107826c7607c594de965
Author: Björn Steinbrink [off-list ref]
Date:   Thu Jul 24 18:32:00 2008 +0100

    index-pack.c: correctly initialize appended objects
    
    When index-pack completes a thin pack it appends objects to the pack.
    Since the commit 92392b4(index-pack: Honor core.deltaBaseCacheLimit when
    resolving deltas) such an object can be pruned in case of memory
    pressure, and will be read back again by get_data_from_pack().  For this
    to work, the fields in object_entry structure need to be initialized
    properly.
    
    Noticed by Pierre Habouzit.
    
    Signed-off-by: Björn Steinbrink [off-list ref]
    Acked-by: Nicolas Pitre [off-list ref]
    Acked-by: Shawn O. Pearce [off-list ref]
    Signed-off-by: Junio C Hamano [off-list ref]
diff --git a/index-pack.c b/index-pack.c
index c359f8c..7d5344a 100644
--- a/index-pack.c
+++ b/index-pack.c
@@ -698,6 +698,10 @@ static struct object_entry *append_obj_to_pack(
 	write_or_die(output_fd, header, n);
 	obj[0].idx.crc32 = crc32(0, Z_NULL, 0);
 	obj[0].idx.crc32 = crc32(obj[0].idx.crc32, header, n);
+	obj[0].size = size;
+	obj[0].hdr_size = n;
+	obj[0].type = type;
+	obj[0].real_type = type;
 	obj[1].idx.offset = obj[0].idx.offset + n;
 	obj[1].idx.offset += write_compressed(output_fd, buf, size, &obj[0].idx.crc32);
 	hashcpy(obj->idx.sha1, sha1);
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help