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

[PATCH v3 00/12] Fix some reference-related races

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Jun 20, 2013, 08:37 UTC
Message-ID
<1371717474-28942-1-git-send-email-mhagger@alum.mit.edu>

v3 of mh/ref-races. Thanks to Junio for the suggestion implemented in this version.

Change since v2:
* Change lock_packed_refs() to use its own struct lock_file rather
  than requiring the caller to supply its own.

Please note that this patch series's usage of stat()/fstat() causes breakages under cygwin, pointed out by Ramsay Jones. He has graciously offered to work on this issue.

Patch 12/12 is still optional--it avoids a little bit of work when rewriting the packed-refs file (including when deleting a reference that has a packed version), but relies on the stat-based freshness check not giving a false negative. Peff seems to lean slightly against merging the last patch and AFAIK nobody else has expressed an opinion. (Of course, if the test cannot be relied upon in the check before writing, then we should not forget that its failure in a check before reading can also cause problems, however rarely.)

Jeff King (2):
  get_packed_ref_cache: reload packed-refs file when it changes
  for_each_ref: load all loose refs before packed refs
Michael Haggerty (10):
  repack_without_ref(): split list curation and entry writing
  pack_refs(): split creation of packed refs and entry writing
  refs: wrap the packed refs cache in a level of indirection
  refs: implement simple transactions for the packed-refs file
  refs: manage lifetime of packed refs cache via reference counting
  do_for_each_entry(): increment the packed refs cache refcount
  packed_ref_cache: increment refcount when locked
  Extract a struct stat_data from cache_entry
  add a stat_validity struct
  refs: do not invalidate the packed-refs cache unnecessarily
 builtin/clone.c    |   5 +-
 builtin/ls-files.c |  12 +-
 cache.h            |  60 ++++++++--
 read-cache.c       | 181 ++++++++++++++++++------------
 refs.c             | 319 ++++++++++++++++++++++++++++++++++++++++++++---------
 refs.h             |  26 ++++-
 6 files changed, 469 insertions(+), 134 deletions(-)
-- 
1.8.3.1
Next: Michael Haggerty
Message 1 of 13 in “Fix some reference-related races”
  1. 00/12 Fix some reference-related racesMichael Haggerty, Jun 20, 2013
  2. 01/12 repack_without_ref(): split list curation and entry writingMichael Haggerty, Jun 20, 2013
  3. 02/12 pack_refs(): split creation of packed refs and entry writingMichael Haggerty, Jun 20, 2013
  4. 03/12 refs: wrap the packed refs cache in a level of indirectionMichael Haggerty, Jun 20, 2013
  5. 04/12 refs: implement simple transactions for the packed-refs fileMichael Haggerty, Jun 20, 2013
  6. 05/12 refs: manage lifetime of packed refs cache via reference countingMichael Haggerty, Jun 20, 2013
  7. 06/12 do_for_each_entry(): increment the packed refs cache refcountMichael Haggerty, Jun 20, 2013
  8. 07/12 packed_ref_cache: increment refcount when lockedMichael Haggerty, Jun 20, 2013
  9. 08/12 Extract a struct stat_data from cache_entryMichael Haggerty, Jun 20, 2013
  10. 09/12 add a stat_validity structMichael Haggerty, Jun 20, 2013
  11. 10/12 get_packed_ref_cache: reload packed-refs file when it changesMichael Haggerty, Jun 20, 2013
  12. 11/12 for_each_ref: load all loose refs before packed refsMichael Haggerty, Jun 20, 2013
  13. 12/12 refs: do not invalidate the packed-refs cache unnecessarilyMichael Haggerty, Jun 20, 2013

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.