[PATCH v2 00/12] Fix some reference-related races
- From
Michael Haggerty <mhagger@alum.mit.edu>
- Date
- Jun 19, 2013, 07:51 UTC
- Message-ID
- <1371628293-28824-1-git-send-email-mhagger@alum.mit.edu>
Re-roll of mh/ref-races. Thanks to Peff, Junio, and Ramsay for reviewing v1.
Changes since v1:
* mh/reflife has graduated to master, so this patch series now applies directly to master.
* Some trivial constness adjustments were necessary because of
21a6b9fa read-cache: mark cache_entry pointers const
* Better explain (in comments and log message) patch 01/12.
* In 04/12, access struct lock_file::fd directly instead of keeping a separate copy in struct packed_ref_cache.
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.
The last patch is still optional--it avoids a little bit of work when rewriting the packed-refs file, but relies on the stat-based freshness check not giving a false negative.
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 | 7 +- builtin/ls-files.c | 12 +- cache.h | 60 ++++++++-- read-cache.c | 181 ++++++++++++++++++------------ refs.c | 314 ++++++++++++++++++++++++++++++++++++++++++++--------- refs.h | 27 ++++- 6 files changed, 469 insertions(+), 132 deletions(-)
-- 1.8.3.1