mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
(sem_open): Only call __libc_close if file descriptor is valid.
This commit is contained in:
@ -230,9 +230,6 @@ sem_open (const char *name, int oflag, ...)
|
|||||||
/* Create the file. Don't overwrite an existing file. */
|
/* Create the file. Don't overwrite an existing file. */
|
||||||
if (link (tmpfname, finalname) != 0)
|
if (link (tmpfname, finalname) != 0)
|
||||||
{
|
{
|
||||||
/* Remove the file. */
|
|
||||||
unlink (tmpfname);
|
|
||||||
|
|
||||||
/* Undo the mapping. */
|
/* Undo the mapping. */
|
||||||
(void) munmap (result, sizeof (sem_t));
|
(void) munmap (result, sizeof (sem_t));
|
||||||
|
|
||||||
@ -242,7 +239,15 @@ sem_open (const char *name, int oflag, ...)
|
|||||||
/* This failed. If O_EXCL is not set and the problem was
|
/* This failed. If O_EXCL is not set and the problem was
|
||||||
that the file exists, try again. */
|
that the file exists, try again. */
|
||||||
if ((oflag & O_EXCL) == 0 && errno == EEXIST)
|
if ((oflag & O_EXCL) == 0 && errno == EEXIST)
|
||||||
goto try_again;
|
{
|
||||||
|
/* Remove the file. */
|
||||||
|
(void) unlink (tmpfname);
|
||||||
|
|
||||||
|
/* Close the file. */
|
||||||
|
(void) __libc_close (fd);
|
||||||
|
|
||||||
|
goto try_again;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,7 +261,8 @@ sem_open (const char *name, int oflag, ...)
|
|||||||
result = SEM_FAILED;
|
result = SEM_FAILED;
|
||||||
|
|
||||||
/* We don't need the file descriptor anymore. */
|
/* We don't need the file descriptor anymore. */
|
||||||
__libc_close (fd);
|
if (fd != -1)
|
||||||
|
(void) __libc_close (fd);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user