git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Michael Haggerty <mhagger@alum.mit.edu>
To: Junio C Hamano <gitster@pobox.com>
Cc: Jeff King <peff@peff.net>, Johan Herland <johan@herland.net>,
	Ramsay Jones <ramsay@ramsay1.demon.co.uk>,
	git@vger.kernel.org, Michael Haggerty <mhagger@alum.mit.edu>
Subject: [PATCH v3 00/12] Fix some reference-related races
Date: Thu, 20 Jun 2013 10:37:42 +0200	[thread overview]
Message-ID: <1371717474-28942-1-git-send-email-mhagger@alum.mit.edu> (raw)

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

             reply	other threads:[~2013-06-20  8:44 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-20  8:37 Michael Haggerty [this message]
2013-06-20  8:37 ` [PATCH v3 01/12] repack_without_ref(): split list curation and entry writing Michael Haggerty
2013-06-20  8:37 ` [PATCH v3 02/12] pack_refs(): split creation of packed refs " Michael Haggerty
2013-06-20  8:37 ` [PATCH v3 03/12] refs: wrap the packed refs cache in a level of indirection Michael Haggerty
2013-06-20  8:37 ` [PATCH v3 04/12] refs: implement simple transactions for the packed-refs file Michael Haggerty
2013-06-20  8:37 ` [PATCH v3 05/12] refs: manage lifetime of packed refs cache via reference counting Michael Haggerty
2013-06-20  8:37 ` [PATCH v3 06/12] do_for_each_entry(): increment the packed refs cache refcount Michael Haggerty
2013-06-20  8:37 ` [PATCH v3 07/12] packed_ref_cache: increment refcount when locked Michael Haggerty
2013-06-20  8:37 ` [PATCH v3 08/12] Extract a struct stat_data from cache_entry Michael Haggerty
2013-06-20  8:37 ` [PATCH v3 09/12] add a stat_validity struct Michael Haggerty
2013-06-20  8:37 ` [PATCH v3 10/12] get_packed_ref_cache: reload packed-refs file when it changes Michael Haggerty
2013-06-20  8:37 ` [PATCH v3 11/12] for_each_ref: load all loose refs before packed refs Michael Haggerty
2013-06-20  8:37 ` [PATCH v3 12/12] refs: do not invalidate the packed-refs cache unnecessarily Michael Haggerty

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1371717474-28942-1-git-send-email-mhagger@alum.mit.edu \
    --to=mhagger@alum.mit.edu \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=johan@herland.net \
    --cc=peff@peff.net \
    --cc=ramsay@ramsay1.demon.co.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).