"Johannes Schindelin via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > From: Johannes Schindelin <johannes.schindelin@xxxxxx> > > When running an external diff from, say, a diff tool, it is safe to > assume that we want to write the files in question. On Windows, that > means that there cannot be any other process holding an open handle to > said files, or even just a mapped region. > > So let's make sure that `git diff` itself is not holding any open handle > to the files in question. > > In fact, we will just release the file pair right away, as the external > diff uses the files we just wrote, so we do not need to hold the file > contents in memory anymore. > > This fixes https://github.com/git-for-windows/git/issues/1315 > > Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> > --- > diff.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/diff.c b/diff.c > index 4d3cf83a27..42affb6dcf 100644 > --- a/diff.c > +++ b/diff.c > @@ -4206,6 +4206,8 @@ static void run_external_diff(const char *pgm, > argv_array_pushf(&env, "GIT_DIFF_PATH_COUNTER=%d", ++o->diff_path_counter); > argv_array_pushf(&env, "GIT_DIFF_PATH_TOTAL=%d", q->nr); > > + diff_free_filespec_data(one); > + diff_free_filespec_data(two); > if (run_command_v_opt_cd_env(argv.argv, RUN_USING_SHELL, NULL, env.argv)) > die(_("external diff died, stopping at %s"), name); Looks sensible; will queue. Thanks.