From: Jacob Keller <jacob.e.keller@intel.com>
To: Jeff King <peff@peff.net>
Cc: Taylor Blau <me@ttaylorr.com>,
jean-christophe manciot <actionmystique@gmail.com>,
Patrick Steinhardt <ps@pks.im>, <git@vger.kernel.org>,
Derrick Stolee <stolee@gmail.com>
Subject: Re: unexpected auto-maintenance, was Re: git hogs the CPU, RAM and storage despite its config
Date: Mon, 11 May 2026 16:58:34 -0700 [thread overview]
Message-ID: <d769b895-4388-4c5d-bc13-52bc80ca6b01@intel.com> (raw)
In-Reply-To: <20260511203502.GA25510@coredump.intra.peff.net>
On 5/11/2026 1:35 PM, Jeff King wrote:
> On Mon, May 11, 2026 at 01:21:37PM -0700, Jacob Keller wrote:
>
>>> - If both claim ownership, it's mostly OK, because they'll both try to
>>> unlink() which is idempotent-ish. Though there is a bad sequence
>>> where we delete somebody _else's_ lock, like:
>>>
>>> 1. Parent forks, but has not yet reassigned.
>>>
>>> 2. Child calls reassign to take ownership. Now both have
>>> ownership.
>>>
>>> 3. Signal kills both parent and child, so they enter cleanup
>>> code.
>>>
>>> 4. One of them (let's say the parent) deletes the lockfile.
>>>
>>> 5. Some other unrelated process (let's call it "git other") takes
>>> the lock.
>>>
>>> 6. The child deletes the lockfile.
>>>
>>> And at that point "git other" thinks it holds the lock, but it
>>> doesn't. It's quite an unlikely sequence in practice, though, I'd
>>> think.
>>>
>>> - If neither claims ownership and a signal kills both, then nobody
>>> cleans up the lock and it is left in place. This is annoying, but
>>> also something that can happen occasionally anyway (kill -9, etc).
>>>
>>> I don't have an easy suggestion for making it more atomic, though. You
>>> could choose one or the other direction using some synchronization
>>> between the two (e.g., child reassigns only after parent signals over a
>>> pipe that it has relinquished), but it's all kind of ugly.
>>>
>> Ya, that seems really ugly. My first thought was some way to disable
>> signals temporarily, but I am guessing that either has no good way to do
>> it or would introduce even more issues. Plus there is always kill -9...
>
> I guess the parent could relinquish control by reassigning to "0" before
> even calling fork(), and then taking it back if fork() fails. And then
> worst case is that nobody cleans up the lock (if the child is killed
> before taking control), but that's the least-bad outcome from a
> correctness perspective (though still annoying).
>
> -Peff
This seems simpler than the suggestion of a pipe signal, and the worst
result is only the version that is possible no matter what if there is a
well timed kill -9.
prev parent reply other threads:[~2026-05-11 23:58 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-04 15:27 git hogs the CPU, RAM and storage despite its config jean-christophe manciot
2026-05-08 18:03 ` unexpected auto-maintenance, was " Jeff King
2026-05-09 15:13 ` Mikael Magnusson
2026-05-09 17:53 ` Jeff King
2026-05-09 17:52 ` Jeff King
2026-05-09 21:52 ` Taylor Blau
2026-05-10 16:08 ` Derrick Stolee
2026-05-10 20:00 ` Taylor Blau
2026-05-11 6:42 ` Patrick Steinhardt
2026-05-11 20:22 ` Jeff King
2026-05-11 20:10 ` Jeff King
2026-05-11 20:01 ` Jeff King
2026-05-11 20:21 ` Jacob Keller
2026-05-11 20:35 ` Jeff King
2026-05-11 23:58 ` Jacob Keller [this message]
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=d769b895-4388-4c5d-bc13-52bc80ca6b01@intel.com \
--to=jacob.e.keller@intel.com \
--cc=actionmystique@gmail.com \
--cc=git@vger.kernel.org \
--cc=me@ttaylorr.com \
--cc=peff@peff.net \
--cc=ps@pks.im \
--cc=stolee@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