From: "Martin Ågren" <martin.agren@gmail.com>
To: git@vger.kernel.org
Cc: "Michael Haggerty" <mhagger@alum.mit.edu>,
"Jeff King" <peff@peff.net>, "Paul Tan" <pyokagan@gmail.com>,
"Christian Couder" <christian.couder@gmail.com>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH 00/11] various lockfile-leaks and -fixes
Date: Sun, 1 Oct 2017 16:56:01 +0200 [thread overview]
Message-ID: <cover.1506862824.git.martin.agren@gmail.com> (raw)
A recent series allowed `struct lock_file`s to be freed [1], so I wanted
to get rid of the "simple" leaks of this kind. I found a couple of
lock-related cleanups along the way and it resulted in this series. It
feels a bit scary at eleven patches -- especially as this is about
locking -- but I hope I've managed to put this into understandable and
reviewable patches. Reviews, thoughts, opinions welcome, as always.
1-2
Instead of allocating and leaking `struct lock_file`s, initialize them
on the stack. These instances were identified by simple grepping.
3-4
Documentation fixes for lockfile and temporary file APIs.
5-7
No need to represent the same information twice. No need for the caller
to provide a (static) lock for us now that we can safely manage our own.
8-11
Error-handling in read-cache.c was a bit lacking and over-eager at the
same time. Sometimes we'd leave the lock open when we should commit it,
sometimes we'd roll it back when we should only close it. We'd also
crash under rare circumstances. Patch 9 addresses a bug in the API which
most likely hasn't hit anyone and maybe never would, but if we don't
have the functionality, I don't think we should pretend like we do.
Martin
[1] https://public-inbox.org/git/20170905121353.62zg3mtextmq5zrs@sigill.intra.peff.net/
Martin Ågren (11):
sha1_file: do not leak `lock_file`
treewide: prefer lockfiles on the stack
lockfile: fix documentation on `close_lock_file_gently()`
tempfile: fix documentation on `delete_tempfile()`
cache-tree: simplify locking logic
apply: move lockfile into `apply_state`
apply: remove `newfd` from `struct apply_state`
cache.h: document `write_locked_index()`
read-cache: require flags for `write_locked_index()`
read-cache: don't leave dangling pointer in `do_write_index()`
read-cache: roll back lock on error with `COMMIT_LOCK`
apply.c | 25 ++++++++-----------------
apply.h | 8 +++-----
builtin/am.c | 27 ++++++++++++---------------
builtin/apply.c | 4 +---
builtin/checkout.c | 14 ++++++--------
builtin/clone.c | 7 +++----
builtin/diff.c | 7 +++----
builtin/difftool.c | 1 -
cache-tree.c | 12 ++++--------
cache.h | 19 +++++++++++++++++++
config.c | 17 ++++++++---------
git-compat-util.h | 7 ++++++-
lockfile.h | 4 ++--
merge-recursive.c | 6 +++---
merge.c | 8 +++-----
read-cache.c | 26 ++++++++++++++------------
sequencer.c | 1 -
sha1_file.c | 16 +++++++---------
tempfile.h | 8 ++++----
wt-status.c | 8 ++++----
20 files changed, 110 insertions(+), 115 deletions(-)
--
2.14.1.727.g9ddaf86
next reply other threads:[~2017-10-01 14:56 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-01 14:56 Martin Ågren [this message]
2017-10-01 14:56 ` [PATCH 01/11] sha1_file: do not leak `lock_file` Martin Ågren
2017-10-02 5:26 ` Jeff King
2017-10-02 10:15 ` Martin Ågren
2017-10-01 14:56 ` [PATCH 02/11] treewide: prefer lockfiles on the stack Martin Ågren
2017-10-02 3:37 ` Junio C Hamano
2017-10-02 4:12 ` Martin Ågren
2017-10-02 5:34 ` Jeff King
2017-10-01 14:56 ` [PATCH 03/11] lockfile: fix documentation on `close_lock_file_gently()` Martin Ågren
2017-10-02 5:35 ` Jeff King
2017-10-01 14:56 ` [PATCH 04/11] tempfile: fix documentation on `delete_tempfile()` Martin Ågren
2017-10-02 5:38 ` Jeff King
2017-10-01 14:56 ` [PATCH 05/11] cache-tree: simplify locking logic Martin Ågren
2017-10-02 3:40 ` Junio C Hamano
2017-10-02 5:41 ` Jeff King
2017-10-01 14:56 ` [PATCH 06/11] apply: move lockfile into `apply_state` Martin Ågren
2017-10-02 5:48 ` Jeff King
2017-10-01 14:56 ` [PATCH 07/11] apply: remove `newfd` from `struct apply_state` Martin Ågren
2017-10-02 5:50 ` Jeff King
2017-10-01 14:56 ` [PATCH 08/11] cache.h: document `write_locked_index()` Martin Ågren
2017-10-01 14:56 ` [PATCH 09/11] read-cache: require flags for `write_locked_index()` Martin Ågren
2017-10-02 3:49 ` Junio C Hamano
2017-10-02 4:14 ` Martin Ågren
2017-10-02 10:16 ` Martin Ågren
2017-10-02 6:00 ` Jeff King
2017-10-01 14:56 ` [PATCH 10/11] read-cache: don't leave dangling pointer in `do_write_index()` Martin Ågren
2017-10-02 6:15 ` Jeff King
2017-10-02 6:20 ` Jeff King
2017-10-01 14:56 ` [PATCH 11/11] read-cache: roll back lock on error with `COMMIT_LOCK` Martin Ågren
2017-10-02 4:01 ` Junio C Hamano
2017-10-02 2:37 ` [PATCH 00/11] various lockfile-leaks and -fixes Junio C Hamano
2017-10-02 6:22 ` Jeff King
2017-10-02 6:30 ` Junio C Hamano
2017-10-02 10:19 ` Martin Ågren
2017-10-03 6:21 ` Junio C Hamano
2017-10-05 20:32 ` [PATCH v2 00/12] " Martin Ågren
2017-10-05 20:32 ` [PATCH v2 01/12] sha1_file: do not leak `lock_file` Martin Ågren
2017-10-06 1:17 ` Junio C Hamano
2017-10-05 20:32 ` [PATCH v2 02/12] treewide: prefer lockfiles on the stack Martin Ågren
2017-10-05 20:32 ` [PATCH v2 03/12] lockfile: fix documentation on `close_lock_file_gently()` Martin Ågren
2017-10-05 20:32 ` [PATCH v2 04/12] tempfile: fix documentation on `delete_tempfile()` Martin Ågren
2017-10-05 20:32 ` [PATCH v2 05/12] checkout-index: simplify locking logic Martin Ågren
2017-10-06 1:21 ` Junio C Hamano
2017-10-05 20:32 ` [PATCH v2 06/12] cache-tree: " Martin Ågren
2017-10-05 20:32 ` [PATCH v2 07/12] apply: move lockfile into `apply_state` Martin Ågren
2017-10-05 20:32 ` [PATCH v2 08/12] apply: remove `newfd` from `struct apply_state` Martin Ågren
2017-10-05 20:32 ` [PATCH v2 09/12] cache.h: document `write_locked_index()` Martin Ågren
2017-10-05 20:32 ` [PATCH v2 10/12] read-cache: drop explicit `CLOSE_LOCK`-flag Martin Ågren
2017-10-06 1:39 ` Junio C Hamano
2017-10-06 11:02 ` Martin Ågren
2017-10-05 20:32 ` [PATCH v2 11/12] read-cache: leave lock in right state in `write_locked_index()` Martin Ågren
2017-10-06 2:01 ` Junio C Hamano
2017-10-06 11:04 ` Martin Ågren
2017-10-06 12:02 ` Junio C Hamano
2017-10-06 19:44 ` Martin Ågren
2017-10-06 20:12 ` [PATCH v3 00/12] Re: various lockfile-leaks and -fixes Martin Ågren
2017-10-06 20:12 ` [PATCH v3 01/12] sha1_file: do not leak `lock_file` Martin Ågren
2017-10-06 20:12 ` [PATCH v3 02/12] treewide: prefer lockfiles on the stack Martin Ågren
2017-10-06 20:12 ` [PATCH v3 03/12] lockfile: fix documentation on `close_lock_file_gently()` Martin Ågren
2017-10-06 20:12 ` [PATCH v3 04/12] tempfile: fix documentation on `delete_tempfile()` Martin Ågren
2017-10-06 20:12 ` [PATCH v3 05/12] checkout-index: simplify locking logic Martin Ågren
2017-10-06 20:12 ` [PATCH v3 06/12] cache-tree: " Martin Ågren
2017-10-06 20:12 ` [PATCH v3 07/12] apply: move lockfile into `apply_state` Martin Ågren
2017-10-06 20:12 ` [PATCH v3 08/12] apply: remove `newfd` from `struct apply_state` Martin Ågren
2017-10-06 20:12 ` [PATCH v3 09/12] cache.h: document `write_locked_index()` Martin Ågren
2017-10-06 20:12 ` [PATCH v3 10/12] read-cache: drop explicit `CLOSE_LOCK`-flag Martin Ågren
2017-10-06 20:12 ` [PATCH v3 11/12] read-cache: leave lock in right state in `write_locked_index()` Martin Ågren
2017-10-06 20:12 ` [PATCH v3 12/12] read_cache: roll back lock in `update_index_if_able()` Martin Ågren
2017-10-05 20:32 ` [PATCH v2 " Martin Ågren
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1506862824.git.martin.agren@gmail.com \
--to=martin.agren@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=mhagger@alum.mit.edu \
--cc=pclouds@gmail.com \
--cc=peff@peff.net \
--cc=pyokagan@gmail.com \
/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.
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 NNTP newsgroup(s).