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

[PATCH v3 00/25] Lockfile correctness and refactoring

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Apr 14, 2014, 13:54 UTC
Message-ID
<1397483695-10888-1-git-send-email-mhagger@alum.mit.edu>

Round v3. Thanks to Johannes Sixt and Peff for feedback on v2. This version addresses all issues raised for v1 [1] and v2 [2].

Changes since v2:
* Instead of keeping track of whether a lock_file object is active via
  a new bit in a flags bitmask, store it in a separate volatile
  sig_atomic_t struct member.  This makes it a little less undefined
  when this field is accessed by the signal handler.
* Add some other "volatile" qualifiers to values used by the signal
  handler.
* Define constants LOCK_SUFFIX and LOCK_SUFFIX_LEN in cache.h and use
  them both inside and outside lockfile.c.  (In v2, only
  LOCK_SUFFIX_LEN was defined and it was only used within lockfile.c,
  because the other potential users in refs.c were rewritten anyway.
  But that rewriting is no longer included in the patch series, so it
  makes sense to define these constants as part of the public lockfile
  API.)
* Swap order of first two patches because the documentation lists
  unable_to_lock_die() under its new name.
* die() (instead of NOP) if commit_lock_file() is called for an
  unlocked lock_file object.
* Rebase to current master (there were no conflicts).

[1] http://thread.gmane.org/gmane.comp.version-control.git/245609 [2] http://thread.gmane.org/gmane.comp.version-control.git/245801

Michael Haggerty (25):
  unable_to_lock_die(): rename function from unable_to_lock_index_die()
  api-lockfile: expand the documentation
  rollback_lock_file(): do not clear filename redundantly
  rollback_lock_file(): set fd to -1
  lockfile: unlock file if lockfile permissions cannot be adjusted
  hold_lock_file_for_append(): release lock on errors
  lock_file(): always add lock_file object to lock_file_list
  lockfile.c: document the various states of lock_file objects
  cache.h: define constants LOCK_SUFFIX and LOCK_SUFFIX_LEN
  delete_ref_loose(): don't muck around in the lock_file's filename
  prepare_index(): declare return value to be (const char *)
  write_packed_entry_fn(): convert cb_data into a (const int *)
  lock_file(): exit early if lockfile cannot be opened
  remove_lock_file(): call rollback_lock_file()
  commit_lock_file(): inline temporary variable
  commit_lock_file(): die() if called for unlocked lockfile object
  lockfile: avoid transitory invalid states
  struct lock_file: declare some fields volatile
  try_merge_strategy(): remove redundant lock_file allocation
  try_merge_strategy(): use a statically-allocated lock_file object
  commit_lock_file(): use a strbuf to manage temporary space
  Change lock_file::filename into a strbuf
  resolve_symlink(): use a strbuf for internal scratch space
  resolve_symlink(): take a strbuf parameter
  trim_last_path_elm(): replace last_path_elm()
 Documentation/technical/api-lockfile.txt |  40 ++++-
 builtin/commit.c                         |  16 +-
 builtin/merge.c                          |  15 +-
 builtin/reflog.c                         |   2 +-
 builtin/update-index.c                   |   2 +-
 cache.h                                  |  15 +-
 config.c                                 |   6 +-
 lockfile.c                               | 275 ++++++++++++++++++-------------
 refs.c                                   |  29 ++--
 shallow.c                                |   6 +-
 10 files changed, 247 insertions(+), 159 deletions(-)
-- 
1.9.1
Next: Michael Haggerty
Message 1 of 32 in “Lockfile correctness and refactoring”
  1. 00/25 Lockfile correctness and refactoringMichael Haggerty, Apr 14, 2014
  2. 01/25 unable_to_lock_die(): rename function from unable_to_lock_index_die()Michael Haggerty, Apr 14, 2014
  3. 02/25 api-lockfile: expand the documentationMichael Haggerty, Apr 14, 2014
  4. 03/25 rollback_lock_file(): do not clear filename redundantlyMichael Haggerty, Apr 14, 2014
  5. 04/25 rollback_lock_file(): set fd to -1Michael Haggerty, Apr 14, 2014
  6. 05/25 lockfile: unlock file if lockfile permissions cannot be adjustedMichael Haggerty, Apr 14, 2014
  7. 06/25 hold_lock_file_for_append(): release lock on errorsMichael Haggerty, Apr 14, 2014
  8. 07/25 lock_file(): always add lock_file object to lock_file_listMichael Haggerty, Apr 14, 2014
  9. 08/25 lockfile.c: document the various states of lock_file objectsMichael Haggerty, Apr 14, 2014
  10. 09/25 cache.h: define constants LOCK_SUFFIX and LOCK_SUFFIX_LENMichael Haggerty, Apr 14, 2014
  11. 10/25 delete_ref_loose(): don't muck around in the lock_file's filenameMichael Haggerty, Apr 14, 2014
  12. 11/25 prepare_index(): declare return value to be (const char *)Michael Haggerty, Apr 14, 2014
  13. 12/25 write_packed_entry_fn(): convert cb_data into a (const int *)Michael Haggerty, Apr 14, 2014
  14. 13/25 lock_file(): exit early if lockfile cannot be openedMichael Haggerty, Apr 14, 2014
  15. 14/25 remove_lock_file(): call rollback_lock_file()Michael Haggerty, Apr 14, 2014
  16. 15/25 commit_lock_file(): inline temporary variableMichael Haggerty, Apr 14, 2014
  17. 16/25 commit_lock_file(): die() if called for unlocked lockfile objectMichael Haggerty, Apr 14, 2014
  18. Johannes SixtApr 15, 2014
  19. Michael HaggertyApr 16, 2014
  20. 17/25 lockfile: avoid transitory invalid statesMichael Haggerty, Apr 14, 2014
  21. 18/25 struct lock_file: declare some fields volatileMichael Haggerty, Apr 14, 2014
  22. Johannes SixtApr 15, 2014
  23. Michael HaggertyApr 16, 2014
  24. 19/25 try_merge_strategy(): remove redundant lock_file allocationMichael Haggerty, Apr 14, 2014
  25. 20/25 try_merge_strategy(): use a statically-allocated lock_file objectMichael Haggerty, Apr 14, 2014
  26. 21/25 commit_lock_file(): use a strbuf to manage temporary spaceMichael Haggerty, Apr 14, 2014
  27. 22/25 Change lock_file::filename into a strbufMichael Haggerty, Apr 14, 2014
  28. 23/25 resolve_symlink(): use a strbuf for internal scratch spaceMichael Haggerty, Apr 14, 2014
  29. 24/25 resolve_symlink(): take a strbuf parameterMichael Haggerty, Apr 14, 2014
  30. 25/25 trim_last_path_elm(): replace last_path_elm()Michael Haggerty, Apr 14, 2014
  31. Torsten BögershausenApr 15, 2014
  32. Michael HaggertyApr 16, 2014

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.