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:
authorChristopher Faylor <me@cgf.cx>2011-04-20 19:32:31 +0400
committerChristopher Faylor <me@cgf.cx>2011-04-20 19:32:31 +0400
commit2f9c27131fc48d8364e0ef16332cf6e6402c4fdd (patch)
treee3982e46b63451728b18606c2b082795a3ce625b /winsup/cygwin/select.cc
parentee10415f2711967ccf83c0b7eb8338d15a3e7bf6 (diff)
* select.cc (serial_cleanup): Make sure that device_specific_pipe is always
deleted regardless of whether it has a unique thread associated with it (socket_cleanup): Ditto. (mailslot_cleanup): Ditto.
Diffstat (limited to 'winsup/cygwin/select.cc')
-rw-r--r--winsup/cygwin/select.cc24
1 files changed, 15 insertions, 9 deletions
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc
index e63567700..eb1728f51 100644
--- a/winsup/cygwin/select.cc
+++ b/winsup/cygwin/select.cc
@@ -1150,13 +1150,15 @@ static void
serial_cleanup (select_record *, select_stuff *stuff)
{
select_serial_info *si = (select_serial_info *) stuff->device_specific_serial;
- if (si && si->thread)
+ if (!si)
+ return;
+ if (si->thread)
{
si->stop_thread = true;
si->thread->detach ();
- delete si;
- stuff->device_specific_serial = NULL;
}
+ delete si;
+ stuff->device_specific_serial = NULL;
}
select_record *
@@ -1465,15 +1467,17 @@ socket_cleanup (select_record *, select_stuff *stuff)
{
select_socket_info *si = (select_socket_info *) stuff->device_specific_socket;
select_printf ("si %p si->thread %p", si, si ? si->thread : NULL);
- if (si && si->thread)
+ if (!si)
+ return;
+ if (si->thread)
{
SetEvent (si->w4[0]);
/* Wait for thread to go away */
si->thread->detach ();
ResetEvent (si->w4[0]);
- stuff->device_specific_socket = NULL;
- delete si;
}
+ delete si;
+ stuff->device_specific_socket = NULL;
select_printf ("returning");
}
@@ -1703,13 +1707,15 @@ static void
mailslot_cleanup (select_record *, select_stuff *stuff)
{
select_mailslot_info *mi = (select_mailslot_info *) stuff->device_specific_mailslot;
- if (mi && mi->thread)
+ if (!mi)
+ return;
+ if (mi->thread)
{
mi->stop_thread = true;
mi->thread->detach ();
- delete mi;
- stuff->device_specific_mailslot = NULL;
}
+ delete mi;
+ stuff->device_specific_mailslot = NULL;
}
select_record *