summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/select.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2014-06-23 14:56:45 +0000
committerCorinna Vinschen <corinna@vinschen.de>2014-06-23 14:56:45 +0000
commitf739fd3ef0716dd603f2c917f5e502d6a7f71f89 (patch)
tree419416f4e34ad1ad80f0584d66b6fe81796a942b /winsup/cygwin/select.cc
parent565e3643dd3f12fc275d2fb0f7642b17afd00691 (diff)
downloadcygnal-f739fd3ef0716dd603f2c917f5e502d6a7f71f89.tar.gz
cygnal-f739fd3ef0716dd603f2c917f5e502d6a7f71f89.tar.bz2
cygnal-f739fd3ef0716dd603f2c917f5e502d6a7f71f89.zip
* select.cc (start_thread_socket): Delete si on early return in case of
an error (CID 59967).
Diffstat (limited to 'winsup/cygwin/select.cc')
-rw-r--r--winsup/cygwin/select.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc
index e923f9161..e83d9a024 100644
--- a/winsup/cygwin/select.cc
+++ b/winsup/cygwin/select.cc
@@ -1414,7 +1414,10 @@ start_thread_socket (select_record *me, select_stuff *stuff)
si = new select_socket_info;
if (!init_tls_select_info ())
- return 0;
+ {
+ delete si;
+ return 0;
+ }
si->ser_num = _my_tls.locals.select.ser_num;
si->w4 = _my_tls.locals.select.w4;
@@ -1440,14 +1443,20 @@ start_thread_socket (select_record *me, select_stuff *stuff)
+ MAXIMUM_WAIT_OBJECTS)
* sizeof (LONG));
if (!nser)
- return 0;
+ {
+ delete si;
+ return 0;
+ }
_my_tls.locals.select.ser_num = si->ser_num = nser;
HANDLE *nw4 = (HANDLE *) realloc (si->w4,
(_my_tls.locals.select.max_w4
+ MAXIMUM_WAIT_OBJECTS)
* sizeof (HANDLE));
if (!nw4)
- return 0;
+ {
+ delete si;
+ return 0;
+ }
_my_tls.locals.select.w4 = si->w4 = nw4;
_my_tls.locals.select.max_w4 += MAXIMUM_WAIT_OBJECTS;
}