* fhandler.h (fhandler_base::get_echo_handle): New virtual method.
(class fhandler_pty_master): Add echo_r and echo_w handles constituting read and write side of new echo pipe. * select.cc (peek_pipe): On pty masters, check additionally if input from the echo pipe is available. * fhandler_tty.cc (fhandler_pty_master::doecho): Drop output_mutex locking. Write output to echo pipe. (fhandler_pty_master::process_slave_output): Check if input is available in echo pipe and prefer to read from it, if so. (fhandler_pty_slave::write): Drop output_mutex locking. (fhandler_pty_master::fhandler_pty_master): Initialize echo pipe handles to NULL. (fhandler_pty_master::close): Close and NULL echo pipe handles. (fhandler_pty_master::setup): Create echo pipe, close in case of error.
This commit is contained in:
		| @@ -1,7 +1,7 @@ | ||||
| /* select.cc | ||||
|  | ||||
|    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, | ||||
|    2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc. | ||||
|    2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Red Hat, Inc. | ||||
|  | ||||
| This file is part of Cygwin. | ||||
|  | ||||
| @@ -626,6 +626,9 @@ peek_pipe (select_record *s, bool from_select) | ||||
| 	  goto out; | ||||
| 	} | ||||
|       int n = pipe_data_available (s->fd, fh, h, false); | ||||
|       /* On PTY masters, check if input from the echo pipe is available. */ | ||||
|       if (n == 0 && fh->get_echo_handle ()) | ||||
| 	n = pipe_data_available (s->fd, fh, fh->get_echo_handle (), false); | ||||
|  | ||||
|       if (n < 0) | ||||
| 	{ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user