1
1

Ticket #3025: race condition when creating temporary directory.

When there's no mc-tmpdir and a user tries to start two mc sessions
simultaneously, sometimes (in one out of ten attempts on my machine) one
mc session emits the following error message:

Cannot create temporary directory /tmp/mc-lars: File exists (17)
Temporary files will be created in /tmp
Press any key to continue...

Steps to reproduce:

# rm /tmp/mc-$(whoami) -rf
# uxterm -e mc & uxterm -e mc

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
Этот коммит содержится в:
Amadeusz Sławiński 2013-06-21 13:54:11 +04:00 коммит произвёл Andrew Borodin
родитель ff211e5fd3
Коммит 33c47b5734

Просмотреть файл

@ -840,7 +840,10 @@ mc_tmpdir (void)
canonicalize_pathname (buffer); canonicalize_pathname (buffer);
if (lstat (buffer, &st) == 0) /* Try to create directory */
if (mkdir (buffer, S_IRWXU) != 0)
{
if (errno == EEXIST && lstat (buffer, &st) == 0)
{ {
/* Sanity check for existing directory */ /* Sanity check for existing directory */
if (!S_ISDIR (st.st_mode)) if (!S_ISDIR (st.st_mode))
@ -851,9 +854,6 @@ mc_tmpdir (void)
error = _("Cannot set correct permissions for directory %s\n"); error = _("Cannot set correct permissions for directory %s\n");
} }
else else
{
/* Need to create directory */
if (mkdir (buffer, S_IRWXU) != 0)
{ {
fprintf (stderr, fprintf (stderr,
_("Cannot create temporary directory %s: %s\n"), _("Cannot create temporary directory %s: %s\n"),