* posix_ipc.cc (mq_open): Avoid closing the same descriptor twice in

case of errors.
	(sem_open): Ditto.
This commit is contained in:
Corinna Vinschen 2009-09-24 09:25:35 +00:00
parent 1c23aff7a3
commit 599d462dfa
2 changed files with 15 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2009-09-24 Corinna Vinschen <corinna@vinschen.de>
* posix_ipc.cc (mq_open): Avoid closing the same descriptor twice in
case of errors.
(sem_open): Ditto.
2009-09-24 Corinna Vinschen <corinna@vinschen.de>
* kernel32.cc (CreateMutexW): Use correct access mask.

View File

@ -312,7 +312,7 @@ extern "C" void *mmap64 (void *, size_t, int, int, int, _off64_t);
extern "C" mqd_t
mq_open (const char *name, int oflag, ...)
{
int i, fd, nonblock, created;
int i, fd = -1, nonblock, created;
long msgsize, index;
_off64_t filesize = 0;
va_list ap;
@ -449,6 +449,7 @@ exists:
if (errno == ENOENT && (oflag & O_CREAT))
{
close (fd);
fd = -1;
goto again;
}
goto err;
@ -469,6 +470,7 @@ exists:
if (mptr == (int8_t *) MAP_FAILED)
goto err;
close (fd);
fd = -1;
/* Allocate one mq_info{} for each open */
if (!(mqinfo = (struct mq_info *) malloc (sizeof (struct mq_info))))
@ -500,7 +502,8 @@ err:
munmap((void *) mptr, (size_t) filesize);
if (mqinfo)
free (mqinfo);
close (fd);
if (fd >= 0)
close (fd);
return (mqd_t) -1;
}
@ -909,7 +912,7 @@ struct sem_finfo
extern "C" sem_t *
sem_open (const char *name, int oflag, ...)
{
int i, fd, created;
int i, fd = -1, created;
va_list ap;
mode_t mode = 0;
unsigned int value = 0;
@ -985,6 +988,7 @@ exists:
if (errno == ENOENT && (oflag & O_CREAT))
{
close (fd);
fd = -1;
goto again;
}
goto err;
@ -1023,7 +1027,8 @@ err:
unlink (semname);
if (sem != SEM_FAILED)
semaphore::close (sem);
close (fd);
if (fd >= 0)
close (fd);
return SEM_FAILED;
}