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

[PATCH 04/28] packed_ref_store: move `packed_refs_lock` member here

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Jun 15, 2017, 14:47 UTC
Message-ID
<eea8f3d25e9d3d3a0b63604338f10cfa658bbb43.1497534157.git.mhagger@alum.mit.edu>
In-Reply-To
<cover.1497534157.git.mhagger@alum.mit.edu>

Move the `packed_refs_lock` member from `files_ref_store` to `packed_ref_store`, and rename it to `lock` since it's now more obvious what it is locking.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
 refs/files-backend.c | 31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/refs/files-backend.c b/refs/files-backend.c
index c4b8e2f63b..de8293493f 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -62,6 +62,12 @@ struct packed_ref_store {
 	 * it might still be current; otherwise, NULL.
 	 */
 	struct packed_ref_cache *cache;
+
+	/*
+	 * Lock used for the "packed-refs" file. Note that this (and
+	 * thus the enclosing `packed_ref_store`) must not be freed.
+	 */
+	struct lock_file lock;
 };
 
 static struct packed_ref_store *packed_ref_store_create(
@@ -87,12 +93,6 @@ struct files_ref_store {
 
 	struct ref_cache *loose;
 
-	/*
-	 * Lock used for the "packed-refs" file. Note that this (and
-	 * thus the enclosing `files_ref_store`) must not be freed.
-	 */
-	struct lock_file packed_refs_lock;
-
 	struct packed_ref_store *packed_ref_store;
 };
 
@@ -125,7 +125,7 @@ static void clear_packed_ref_cache(struct files_ref_store *refs)
 	if (refs->packed_ref_store->cache) {
 		struct packed_ref_cache *packed_refs = refs->packed_ref_store->cache;
 
-		if (is_lock_file_locked(&refs->packed_refs_lock))
+		if (is_lock_file_locked(&refs->packed_ref_store->lock))
 			die("BUG: packed-ref cache cleared while locked");
 		refs->packed_ref_store->cache = NULL;
 		release_packed_ref_cache(packed_refs);
@@ -416,7 +416,7 @@ static struct packed_ref_cache *get_packed_ref_cache(struct files_ref_store *ref
 {
 	const char *packed_refs_file = refs->packed_ref_store->path;
 
-	if (!is_lock_file_locked(&refs->packed_refs_lock))
+	if (!is_lock_file_locked(&refs->packed_ref_store->lock))
 		validate_packed_ref_cache(refs);
 
 	if (!refs->packed_ref_store->cache)
@@ -447,7 +447,7 @@ static void add_packed_ref(struct files_ref_store *refs,
 	struct ref_dir *packed_refs;
 	struct ref_entry *packed_entry;
 
-	if (!is_lock_file_locked(&refs->packed_refs_lock))
+	if (!is_lock_file_locked(&refs->packed_ref_store->lock))
 		die("BUG: packed refs not locked");
 
 	if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL))
@@ -1351,7 +1351,8 @@ static int lock_packed_refs(struct files_ref_store *refs, int flags)
 	}
 
 	if (hold_lock_file_for_update_timeout(
-			    &refs->packed_refs_lock, refs->packed_ref_store->path,
+			    &refs->packed_ref_store->lock,
+			    refs->packed_ref_store->path,
 			    flags, timeout_value) < 0)
 		return -1;
 
@@ -1388,10 +1389,10 @@ static int commit_packed_refs(struct files_ref_store *refs)
 
 	files_assert_main_repository(refs, "commit_packed_refs");
 
-	if (!is_lock_file_locked(&refs->packed_refs_lock))
+	if (!is_lock_file_locked(&refs->packed_ref_store->lock))
 		die("BUG: packed-refs not locked");
 
-	out = fdopen_lock_file(&refs->packed_refs_lock, "w");
+	out = fdopen_lock_file(&refs->packed_ref_store->lock, "w");
 	if (!out)
 		die_errno("unable to fdopen packed-refs descriptor");
 
@@ -1409,7 +1410,7 @@ static int commit_packed_refs(struct files_ref_store *refs)
 	if (ok != ITER_DONE)
 		die("error while iterating over references");
 
-	if (commit_lock_file(&refs->packed_refs_lock)) {
+	if (commit_lock_file(&refs->packed_ref_store->lock)) {
 		save_errno = errno;
 		error = -1;
 	}
@@ -1430,9 +1431,9 @@ static void rollback_packed_refs(struct files_ref_store *refs)
 
 	files_assert_main_repository(refs, "rollback_packed_refs");
 
-	if (!is_lock_file_locked(&refs->packed_refs_lock))
+	if (!is_lock_file_locked(&refs->packed_ref_store->lock))
 		die("BUG: packed-refs not locked");
-	rollback_lock_file(&refs->packed_refs_lock);
+	rollback_lock_file(&refs->packed_ref_store->lock);
 	release_packed_ref_cache(packed_ref_cache);
 	clear_packed_ref_cache(refs);
 }
-- 
2.11.0
Previous: Stefan BellerNext: Stefan Beller
Message 5 of 52 in “Create a reference backend for packed refs”
  1. 00/28 Create a reference backend for packed refsMichael Haggerty, Jun 15, 2017
  2. 01/28 add_packed_ref(): teach function to overwrite existing refsMichael Haggerty, Jun 15, 2017
  3. 03/28 packed_ref_store: move `packed_refs_path` hereMichael Haggerty, Jun 15, 2017
  4. Stefan BellerJun 16, 2017
  5. 04/28 packed_ref_store: move `packed_refs_lock` member hereMichael Haggerty, Jun 15, 2017
  6. Stefan BellerJun 16, 2017
  7. Michael HaggertyJun 16, 2017
  8. Stefan BellerJun 16, 2017
  9. 07/28 get_packed_ref_cache(): take a `packed_ref_store *` parameterMichael Haggerty, Jun 15, 2017
  10. 08/28 get_packed_refs(): take a `packed_ref_store *` parameterMichael Haggerty, Jun 15, 2017
  11. 09/28 add_packed_ref(): take a `packed_ref_store *` parameterMichael Haggerty, Jun 15, 2017
  12. 10/28 lock_packed_refs(): take a `packed_ref_store *` parameterMichael Haggerty, Jun 15, 2017
  13. 11/28 commit_packed_refs(): take a `packed_ref_store *` parameterMichael Haggerty, Jun 15, 2017
  14. 13/28 get_packed_ref(): take a `packed_ref_store *` parameterMichael Haggerty, Jun 15, 2017
  15. 14/28 repack_without_refs(): take a `packed_ref_store *` parameterMichael Haggerty, Jun 15, 2017
  16. 15/28 packed_peel_ref(): new function, extracted from `files_peel_ref()`Michael Haggerty, Jun 15, 2017
  17. Stefan BellerJun 16, 2017
  18. Michael HaggertyJun 16, 2017
  19. Stefan BellerJun 16, 2017
  20. 16/28 packed_ref_store: support iterationMichael Haggerty, Jun 15, 2017
  21. 17/28 packed_read_raw_ref(): new function, replacing `resolve_packed_ref()`Michael Haggerty, Jun 15, 2017
  22. 19/28 packed_ref_store: make class into a subclass of `ref_store`Michael Haggerty, Jun 15, 2017
  23. 20/28 commit_packed_refs(): report errors rather than dyingMichael Haggerty, Jun 15, 2017
  24. 21/28 commit_packed_refs(): use a staging file separate from the lockfileMichael Haggerty, Jun 15, 2017
  25. Junio C HamanoJul 20, 2017
  26. Jonathan NiederJul 20, 2017
  27. Junio C HamanoJul 21, 2017
  28. Junio C HamanoJul 21, 2017
  29. Jeff KingJul 24, 2017
  30. Jonathan NiederJul 24, 2017
  31. Jeff KingJul 24, 2017
  32. Junio C HamanoJul 24, 2017
  33. Michael HaggertyJul 26, 2017
  34. 22/28 packed_refs_lock(): function renamed from lock_packed_refs()Michael Haggerty, Jun 15, 2017
  35. 18/28 packed-backend: new module for handling packed referencesMichael Haggerty, Jun 15, 2017
  36. Stefan BellerJun 16, 2017
  37. 24/28 packed_refs_unlock(), packed_refs_is_locked(): new functionsMichael Haggerty, Jun 15, 2017
  38. 26/28 commit_packed_refs(): remove call to `packed_refs_unlock()`Michael Haggerty, Jun 15, 2017
  39. 28/28 read_packed_refs(): die if `packed-refs` contains bogus dataMichael Haggerty, Jun 15, 2017
  40. 23/28 packed_refs_lock(): report errors via a `struct strbuf *err`Michael Haggerty, Jun 15, 2017
  41. 27/28 repack_without_refs(): don't lock or unlock the packed refsMichael Haggerty, Jun 15, 2017
  42. 25/28 clear_packed_ref_cache(): don't protest if the lock is heldMichael Haggerty, Jun 15, 2017
  43. 12/28 rollback_packed_refs(): take a `packed_ref_store *` parameterMichael Haggerty, Jun 15, 2017
  44. 02/28 packed_ref_store: new structMichael Haggerty, Jun 15, 2017
  45. 06/28 validate_packed_ref_cache(): take a `packed_ref_store *` parameterMichael Haggerty, Jun 15, 2017
  46. 05/28 clear_packed_ref_cache(): take a `packed_ref_store *` parameterMichael Haggerty, Jun 15, 2017
  47. Junio C HamanoJun 19, 2017
  48. Junio C HamanoJun 19, 2017
  49. Jeff KingJun 19, 2017
  50. Jeff KingJun 19, 2017
  51. Michael HaggertyJun 22, 2017
  52. Junio C HamanoJun 22, 2017

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.