* 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>
|
2010-05-26 Kazuhiro Fujieda <fujieda@acm.org>
|
||||||
Corinna Vinschen <corinna@vinschen.de>
|
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.
|
int pktmode; // non-zero if pty in a packet mode.
|
||||||
HANDLE master_ctl; // Control socket for handle duplication
|
HANDLE master_ctl; // Control socket for handle duplication
|
||||||
|
cygthread *master_thread; // Master control thread
|
||||||
|
|
||||||
public:
|
public:
|
||||||
int need_nl; // Next read should start with \n
|
int need_nl; // Next read should start with \n
|
||||||
|
|
|
@ -1429,6 +1429,7 @@ fhandler_pty_master::close ()
|
||||||
&installation_key, get_unit ());
|
&installation_key, get_unit ());
|
||||||
CallNamedPipe (buf, &req, sizeof req, &repl, sizeof repl, &len, 500);
|
CallNamedPipe (buf, &req, sizeof req, &repl, sizeof repl, &len, 500);
|
||||||
CloseHandle (arch->master_ctl);
|
CloseHandle (arch->master_ctl);
|
||||||
|
arch->master_thread->detach ();
|
||||||
}
|
}
|
||||||
if (!ForceCloseHandle (arch->from_master))
|
if (!ForceCloseHandle (arch->from_master))
|
||||||
termios_printf ("error closing from_master %p, %E", 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
|
/* Create master control pipe which allows the master to duplicate
|
||||||
the pty pipe handles to processes which deserve it. */
|
the pty pipe handles to processes which deserve it. */
|
||||||
cygthread *h;
|
|
||||||
__small_sprintf (buf, "\\\\.\\pipe\\cygwin-%S-tty%d-master-ctl",
|
__small_sprintf (buf, "\\\\.\\pipe\\cygwin-%S-tty%d-master-ctl",
|
||||||
&installation_key, get_unit ());
|
&installation_key, get_unit ());
|
||||||
master_ctl = CreateNamedPipe (buf, PIPE_ACCESS_DUPLEX,
|
master_ctl = CreateNamedPipe (buf, PIPE_ACCESS_DUPLEX,
|
||||||
|
@ -1814,13 +1814,12 @@ fhandler_pty_master::setup (bool ispty)
|
||||||
errstr = "pty master control pipe";
|
errstr = "pty master control pipe";
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
h = new cygthread (::pty_master_thread, 0, this, "pty_master");
|
master_thread = new cygthread (::pty_master_thread, 0, this, "pty_master");
|
||||||
if (!h)
|
if (!master_thread)
|
||||||
{
|
{
|
||||||
errstr = "pty master control thread";
|
errstr = "pty master control thread";
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
h->zap_h ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
t.from_master = from_master;
|
t.from_master = from_master;
|
||||||
|
|
Loading…
Reference in New Issue