* fhandler.h (class fhandler_pty_master): Add master_thread member.
* fhandler_tty.cc (fhandler_pty_master::close): Properly detach from master thread. (fhandler_pty_master::setup): Store cygthread pointer of pty master control thread in master_thread. Don't zap thread handle.
This commit is contained in:
parent
60321a0733
commit
403ab0c013
|
@ -1,3 +1,11 @@
|
|||
2010-05-26 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* fhandler.h (class fhandler_pty_master): Add master_thread member.
|
||||
* fhandler_tty.cc (fhandler_pty_master::close): Properly detach from
|
||||
master thread.
|
||||
(fhandler_pty_master::setup): Store cygthread pointer of pty master
|
||||
control thread in master_thread. Don't zap thread handle.
|
||||
|
||||
2010-05-26 Kazuhiro Fujieda <fujieda@acm.org>
|
||||
Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
|
|
|
@ -1125,6 +1125,7 @@ class fhandler_pty_master: public fhandler_tty_common
|
|||
{
|
||||
int pktmode; // non-zero if pty in a packet mode.
|
||||
HANDLE master_ctl; // Control socket for handle duplication
|
||||
cygthread *master_thread; // Master control thread
|
||||
|
||||
public:
|
||||
int need_nl; // Next read should start with \n
|
||||
|
|
|
@ -1429,6 +1429,7 @@ fhandler_pty_master::close ()
|
|||
&installation_key, get_unit ());
|
||||
CallNamedPipe (buf, &req, sizeof req, &repl, sizeof repl, &len, 500);
|
||||
CloseHandle (arch->master_ctl);
|
||||
arch->master_thread->detach ();
|
||||
}
|
||||
if (!ForceCloseHandle (arch->from_master))
|
||||
termios_printf ("error closing from_master %p, %E", arch->from_master);
|
||||
|
@ -1802,7 +1803,6 @@ fhandler_pty_master::setup (bool ispty)
|
|||
{
|
||||
/* Create master control pipe which allows the master to duplicate
|
||||
the pty pipe handles to processes which deserve it. */
|
||||
cygthread *h;
|
||||
__small_sprintf (buf, "\\\\.\\pipe\\cygwin-%S-tty%d-master-ctl",
|
||||
&installation_key, get_unit ());
|
||||
master_ctl = CreateNamedPipe (buf, PIPE_ACCESS_DUPLEX,
|
||||
|
@ -1814,13 +1814,12 @@ fhandler_pty_master::setup (bool ispty)
|
|||
errstr = "pty master control pipe";
|
||||
goto err;
|
||||
}
|
||||
h = new cygthread (::pty_master_thread, 0, this, "pty_master");
|
||||
if (!h)
|
||||
master_thread = new cygthread (::pty_master_thread, 0, this, "pty_master");
|
||||
if (!master_thread)
|
||||
{
|
||||
errstr = "pty master control thread";
|
||||
goto err;
|
||||
}
|
||||
h->zap_h ();
|
||||
}
|
||||
|
||||
t.from_master = from_master;
|
||||
|
|
Loading…
Reference in New Issue