From: Taylor Blau <me@ttaylorr.com>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Johannes Sixt <j6t@kdbg.org>
Subject: Re: [PATCH 1/3] compat/mingw: share file handles created via `CreateFileW()`
Date: Wed, 23 Oct 2024 13:23:14 -0400 [thread overview]
Message-ID: <ZxkxAvLeMtxstVdS@nand.local> (raw)
In-Reply-To: <907576d23d1dc39b679a323e74b6bfb227d6c17d.1729695349.git.ps@pks.im>
On Wed, Oct 23, 2024 at 05:04:58PM +0200, Patrick Steinhardt wrote:
> Unless told otherwise, Windows will keep other processes from reading,
> writing and deleting files when one has an open handle that was created
> via `CreateFileW()`. This behaviour can be altered via `FILE_SHARE_*`
> flags such that other processes _can_ read and/or modify such a file.
> This sharing mechanism is quite important in the context of Git, as we
> assume POSIX semantics all over the place.
>
> There are two calls where we don't set up those flags though:
>
> - We don't set `FILE_SHARE_DELETE` when creating a file for appending
> via `mingw_open_append()`. This makes it impossible to delete the
> file from another process or to replace it via an atomic rename.
>
> - When opening a file such that we can change its access/modification
> times. This makes it impossible to perform any kind of operation
> on this file at all from another process. While we only open the
> file for a short amount of time to update its timestamps, this still
> opens us up for a race condition with another process.
>
> Adapt both of these callsites to pass all three sharing flags.
Interesting, and especially so noting that we *do* call CreateFileW()
with the FILE_SHARE_DELETE flag in other functions like create_watch(),
mingw_open_existing(), mingw_getcwd(), etc.
Why didn't we call CreateFileW() with FILE_SHARE_DELETE in the below two
functions? I assume Johannes Schindelin and/or Johannes Sixt (both CC'd)
would know the answer. Regardless, it would be interesting and useful
(IMHO) to include such a detail in the commit message.
Thanks,
Taylor
next prev parent reply other threads:[~2024-10-23 17:23 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-23 15:04 [PATCH 0/3] compat/mingw: implement POSIX-style atomic renames Patrick Steinhardt
2024-10-23 15:04 ` [PATCH 1/3] compat/mingw: share file handles created via `CreateFileW()` Patrick Steinhardt
2024-10-23 16:18 ` Kristoffer Haugsbakk
2024-10-23 17:25 ` Taylor Blau
2024-10-23 17:23 ` Taylor Blau [this message]
2024-10-23 17:25 ` Taylor Blau
2024-10-24 6:30 ` Patrick Steinhardt
2024-10-27 13:14 ` Johannes Sixt
2024-10-27 23:46 ` Taylor Blau
2024-10-23 15:05 ` [PATCH 2/3] compat/mingw: allow deletion of most opened files Patrick Steinhardt
2024-10-23 16:17 ` Kristoffer Haugsbakk
2024-10-23 17:30 ` Taylor Blau
2024-10-24 6:30 ` Patrick Steinhardt
2024-10-23 18:07 ` Taylor Blau
2024-10-23 15:05 ` [PATCH 3/3] compat/mingw: support POSIX semantics for atomic renames Patrick Steinhardt
2024-10-23 16:19 ` Kristoffer Haugsbakk
2024-10-24 6:30 ` Patrick Steinhardt
2024-10-24 7:18 ` Kristoffer Haugsbakk
2024-10-24 7:20 ` Patrick Steinhardt
2024-10-23 18:30 ` Taylor Blau
2024-10-23 15:36 ` [PATCH 0/3] compat/mingw: implement POSIX-style " Taylor Blau
2024-10-24 11:46 ` [PATCH v2 " Patrick Steinhardt
2024-10-24 11:46 ` [PATCH v2 1/3] compat/mingw: share file handles created via `CreateFileW()` Patrick Steinhardt
2024-10-24 11:46 ` [PATCH v2 2/3] compat/mingw: allow deletion of most opened files Patrick Steinhardt
2024-10-27 13:17 ` Johannes Sixt
2024-10-27 15:38 ` Patrick Steinhardt
2024-10-27 23:48 ` Taylor Blau
2024-10-27 23:51 ` Taylor Blau
2024-10-24 11:46 ` [PATCH v2 3/3] compat/mingw: support POSIX semantics for atomic renames Patrick Steinhardt
2024-10-27 13:23 ` Johannes Sixt
2024-10-27 15:38 ` Patrick Steinhardt
2024-10-27 16:31 ` Johannes Sixt
2024-10-27 17:27 ` Patrick Steinhardt
2024-10-27 21:36 ` Johannes Sixt
2024-10-27 23:50 ` Taylor Blau
2024-10-24 16:47 ` [PATCH v2 0/3] compat/mingw: implement POSIX-style " Taylor Blau
2024-10-27 13:27 ` Johannes Sixt
2024-10-27 15:39 ` [PATCH v3 " Patrick Steinhardt
2024-10-27 15:39 ` [PATCH v3 1/3] compat/mingw: share file handles created via `CreateFileW()` Patrick Steinhardt
2024-10-27 15:39 ` [PATCH v3 2/3] compat/mingw: allow deletion of most opened files Patrick Steinhardt
2024-10-27 15:39 ` [PATCH v3 3/3] compat/mingw: support POSIX semantics for atomic renames Patrick Steinhardt
2024-11-06 3:54 ` [PATCH v3 0/3] compat/mingw: implement POSIX-style " Junio C Hamano
2024-11-06 6:44 ` Johannes Sixt
2024-11-06 12:09 ` Junio C Hamano
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=ZxkxAvLeMtxstVdS@nand.local \
--to=me@ttaylorr.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=j6t@kdbg.org \
--cc=ps@pks.im \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.