Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2009-09-24 13:25:35 +0400
committerCorinna Vinschen <corinna@vinschen.de>2009-09-24 13:25:35 +0400
commit599d462dfa2b6e149948f6c00cef5d1d84d809c7 (patch)
tree77ad13844c4a93c6948d3d0f789f1f28befff693 /winsup/cygwin/posix_ipc.cc
parent1c23aff7a306854a2f280f7ef2bbebdfca7b83b3 (diff)
* posix_ipc.cc (mq_open): Avoid closing the same descriptor twice in
case of errors. (sem_open): Ditto.
Diffstat (limited to 'winsup/cygwin/posix_ipc.cc')
-rw-r--r--winsup/cygwin/posix_ipc.cc13
1 files changed, 9 insertions, 4 deletions
diff --git a/winsup/cygwin/posix_ipc.cc b/winsup/cygwin/posix_ipc.cc
index 1c149cfbc..07881be05 100644
--- a/winsup/cygwin/posix_ipc.cc
+++ b/winsup/cygwin/posix_ipc.cc
@@ -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;
}