git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 6/7] index-pack: make resolve_delta() assume base data

From
JTJonathan Tan <jonathantanmy@google.com>
Date
Sep 8, 2020, 19:48 UTC
Message-ID
<34b53f268fad32aca499f5f4b73ceedca693e9ef.1599594441.git.jonathantanmy@google.com>
In-Reply-To
<cover.1599594441.git.jonathantanmy@google.com>

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>
---
 builtin/index-pack.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index 94d0f53b03..f69a50d46b 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -927,7 +927,7 @@ static struct base_data *make_base(struct object_entry *obj,
 static struct base_data *resolve_delta(struct object_entry *delta_obj,
 				       struct base_data *base)
 {
-	void *base_data, *delta_data, *result_data;
+	void *delta_data, *result_data;
 	struct base_data *result;
 	unsigned long result_size;
 
@@ -942,8 +942,8 @@ static struct base_data *resolve_delta(struct object_entry *delta_obj,
 		obj_stat[i].base_object_no = j;
 	}
 	delta_data = get_data_from_pack(delta_obj);
-	base_data = get_base_data(base);
-	result_data = patch_delta(base_data, base->size,
+	assert(base->data);
+	result_data = patch_delta(base->data, base->size,
 				  delta_data, delta_obj->size, &result_size);
 	free(delta_data);
 	if (!result_data)
@@ -1003,6 +1003,7 @@ static struct base_data *find_unresolved_deltas_1(struct base_data *base,
 			    (uintmax_t)child->idx.offset,
 			    oid_to_hex(&base->obj->idx.oid));
 
+		get_base_data(base);
 		result = resolve_delta(child, base);
 		if (base->ref_first == base->ref_last && base->ofs_last == -1)
 			free_base_data(base);
@@ -1017,6 +1018,7 @@ static struct base_data *find_unresolved_deltas_1(struct base_data *base,
 
 		assert(child->real_type == OBJ_OFS_DELTA);
 		child->real_type = base->obj->real_type;
+		get_base_data(base);
 		result = resolve_delta(child, base);
 		if (base->ofs_first == base->ofs_last)
 			free_base_data(base);
-- 
2.28.0.526.ge36021eeef-goog
Previous: Jonathan TanNext: Jonathan Tan
Message 24 of 28 in “Better threaded delta resolution in index-pack (another try)”
  1. 0/7 Better threaded delta resolution in index-pack (another try)Jonathan Tan, Aug 24, 2020
  2. 1/7 Documentation: deltaBaseCacheLimit is per-threadJonathan Tan, Aug 24, 2020
  3. fetch-pack: in partial clone, pass --promisorJonathan Tan, Aug 24, 2020
  4. Jonathan TanAug 24, 2020
  5. 2/7 index-pack: remove redundant parameterJonathan Tan, Aug 24, 2020
  6. Junio C HamanoAug 24, 2020
  7. 3/7 index-pack: unify threaded and unthreaded codeJonathan Tan, Aug 24, 2020
  8. Junio C HamanoAug 24, 2020
  9. 5/7 index-pack: calculate {ref,ofs}_{first,last} earlyJonathan Tan, Aug 24, 2020
  10. 7/7 index-pack: make quantum of work smallerJonathan Tan, Aug 24, 2020
  11. Junio C HamanoAug 24, 2020
  12. 6/7 index-pack: make resolve_delta() assume base dataJonathan Tan, Aug 24, 2020
  13. 4/7 index-pack: remove redundant child fieldJonathan Tan, Aug 24, 2020
  14. Junio C HamanoAug 24, 2020
  15. fixup! index-pack: make quantum of work smallerJonathan Tan, Aug 24, 2020
  16. Jeff KingAug 24, 2020
  17. Jonathan TanAug 25, 2020
  18. Jeff KingAug 25, 2020
  19. Jeff KingAug 25, 2020
  20. 0/7 Better threaded delta resolution in index-pack (another try)Jonathan Tan, Sep 8, 2020
  21. 2/7 index-pack: remove redundant parameterJonathan Tan, Sep 8, 2020
  22. 3/7 index-pack: unify threaded and unthreaded codeJonathan Tan, Sep 8, 2020
  23. 7/7 index-pack: make quantum of work smallerJonathan Tan, Sep 8, 2020
  24. 6/7 index-pack: make resolve_delta() assume base dataJonathan Tan, Sep 8, 2020
  25. 5/7 index-pack: calculate {ref,ofs}_{first,last} earlyJonathan Tan, Sep 8, 2020
  26. 4/7 index-pack: remove redundant child fieldJonathan Tan, Sep 8, 2020
  27. 1/7 Documentation: deltaBaseCacheLimit is per-threadJonathan Tan, Sep 8, 2020
  28. Junio C HamanoSep 8, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.