1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-13 08:46:09 +02:00

Merge branch 'rs/tempfile-cleanup-race-fix' into jk/tempfile-active-flag-cleanup

* rs/tempfile-cleanup-race-fix:
  tempfile: avoid directory cleanup race
This commit is contained in:
Junio C Hamano 2022-08-30 14:16:41 -07:00
commit 78861eb58a
2 changed files with 7 additions and 9 deletions

View File

@ -59,14 +59,11 @@ static VOLATILE_LIST_HEAD(tempfile_list);
static void remove_template_directory(struct tempfile *tempfile,
int in_signal_handler)
{
if (tempfile->directorylen > 0 &&
tempfile->directorylen < tempfile->filename.len &&
tempfile->filename.buf[tempfile->directorylen] == '/') {
strbuf_setlen(&tempfile->filename, tempfile->directorylen);
if (tempfile->directory) {
if (in_signal_handler)
rmdir(tempfile->filename.buf);
rmdir(tempfile->directory);
else
rmdir_or_warn(tempfile->filename.buf);
rmdir_or_warn(tempfile->directory);
}
}
@ -115,7 +112,7 @@ static struct tempfile *new_tempfile(void)
tempfile->owner = 0;
INIT_LIST_HEAD(&tempfile->list);
strbuf_init(&tempfile->filename, 0);
tempfile->directorylen = 0;
tempfile->directory = NULL;
return tempfile;
}
@ -141,6 +138,7 @@ static void deactivate_tempfile(struct tempfile *tempfile)
{
tempfile->active = 0;
strbuf_release(&tempfile->filename);
free(tempfile->directory);
volatile_list_del(&tempfile->list);
free(tempfile);
}
@ -254,7 +252,7 @@ struct tempfile *mks_tempfile_dt(const char *directory_template,
tempfile = new_tempfile();
strbuf_swap(&tempfile->filename, &sb);
tempfile->directorylen = directorylen;
tempfile->directory = xmemdupz(tempfile->filename.buf, directorylen);
tempfile->fd = fd;
activate_tempfile(tempfile);
return tempfile;

View File

@ -82,7 +82,7 @@ struct tempfile {
FILE *volatile fp;
volatile pid_t owner;
struct strbuf filename;
size_t directorylen;
char *directory;
};
/*