Re: [PATCH 2/2] mingw: ensure temporary file handles are not inherited by child processes
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- Aug 17, 2016, 12:48 UTC
- Message-ID
- <CAPig+cR4=kEUb5PsZfoz3=W+R61wER=vHos5uX02kEVM8YETgA@mail.gmail.com>
- In-Reply-To
- <77e7c4e4de6c45a1b24bb4d08ca20a1385f43444.1471437637.git.johannes.schindelin@gmx.de>
On Wed, Aug 17, 2016 at 8:41 AM, Johannes Schindelin <johannes.schindelin@gmx.de> wrote:
Show 19 quoted lines
> When the index is locked and child processes inherit the handle to > said lock and the parent process wants to remove the lock before the > child process exits, on Windows there is a problem: it won't work > because files cannot be deleted if a process holds a handle on them. > The symptom: > > Rename from 'xxx/.git/index.lock' to 'xxx/.git/index' failed. > Should I try again? (y/n) > > Spawning child processes with bInheritHandles==FALSE would not work > because no file handles would be inherited, not even the hStdXxx > handles in STARTUPINFO (stdin/stdout/stderr). > > Opening every file with O_NOINHERIT does not work, either, as e.g. > git-upload-pack expects inherited file handles. > > This leaves us with the only way out: creating temp files with the > O_NOINHERIT flag. This flag is Windows-specific, however. For our > purposes, it is equivalent our purposes) to O_CLOEXEC (which does not
s/our purposes)//
Show 7 quoted lines
> exist on Windows), so let's just open temporary files with the > O_CLOEXEC flag and map that flag to O_NOINHERIT on Windows. > > This fixes the test that we just introduced to demonstrate the problem. > > Signed-off-by: Ben Wijen <ben@wijen.net> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>