@matheusbsbs / matheus-bagliano / commits / ee6f058384
Fork 0

index-pack: make resolve_delta() assume base data

A subsequent commit will make the quantum of work smaller, necessitating more locking. This commit allows resolve_delta() to be called outside the lock. Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jonathan Tan committed Aug 24, 2020 at 12:16 UTC ee6f058384aa61ec175de9e45f413f209c6bf1dc
1 file changed +5 -3
builtin/index-pack.c
+5 -3
@@ -927,7 +927,7 @@ static struct base_data *make_base(struct object_entry *obj,
927 static struct base_data *resolve_delta(struct object_entry *delta_obj,
928 struct base_data *base)
929 {
930 - void *base_data, *delta_data, *result_data;
930 + void *delta_data, *result_data;
931 struct base_data *result;
932 unsigned long result_size;
933
@@ -942,8 +942,8 @@ static struct base_data *resolve_delta(struct object_entry *delta_obj,
942 obj_stat[i].base_object_no = j;
943 }
944 delta_data = get_data_from_pack(delta_obj);
945 - base_data = get_base_data(base);
946 - result_data = patch_delta(base_data, base->size,
945 + assert(base->data);
946 + result_data = patch_delta(base->data, base->size,
947 delta_data, delta_obj->size, &result_size);
948 free(delta_data);
949 if (!result_data)
@@ -1003,6 +1003,7 @@ static struct base_data *find_unresolved_deltas_1(struct base_data *base,
1003 (uintmax_t)child->idx.offset,
1004 oid_to_hex(&base->obj->idx.oid));
1005
1006 + get_base_data(base);
1007 result = resolve_delta(child, base);
1008 if (base->ref_first == base->ref_last && base->ofs_last == -1)
1009 free_base_data(base);
@@ -1017,6 +1018,7 @@ static struct base_data *find_unresolved_deltas_1(struct base_data *base,
1018
1019 assert(child->real_type == OBJ_OFS_DELTA);
1020 child->real_type = base->obj->real_type;
1021 + get_base_data(base);
1022 result = resolve_delta(child, base);
1023 if (base->ofs_first == base->ofs_last)
1024 free_base_data(base);