Cygwin: console: Fix new bugs in cons_master_thread().
- The previous commit for console introduced new bugs in error handling in cons_master_thread(). This patch fixes that.
This commit is contained in:
parent
15dd408118
commit
8489ba9996
|
@ -361,7 +361,8 @@ fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp)
|
|||
{
|
||||
case WAIT_OBJECT_0:
|
||||
total_read = 0;
|
||||
while (cygwait (p->input_handle, (DWORD) 0) == WAIT_OBJECT_0)
|
||||
while (cygwait (p->input_handle, (DWORD) 0) == WAIT_OBJECT_0
|
||||
&& total_read < inrec_size)
|
||||
{
|
||||
DWORD len;
|
||||
ReadConsoleInputW (p->input_handle, input_rec + total_read,
|
||||
|
@ -477,7 +478,8 @@ remove_record:
|
|||
/* Try to fix */
|
||||
acquire_attach_mutex (mutex_timeout);
|
||||
n = 0;
|
||||
while (cygwait (p->input_handle, (DWORD) 0) == WAIT_OBJECT_0)
|
||||
while (cygwait (p->input_handle, (DWORD) 0) == WAIT_OBJECT_0
|
||||
&& n < inrec_size)
|
||||
{
|
||||
DWORD len;
|
||||
ReadConsoleInputW (p->input_handle, input_tmp + n,
|
||||
|
@ -492,14 +494,13 @@ remove_record:
|
|||
if (total_read + j - i >= n)
|
||||
{ /* Something is wrong. Giving up. */
|
||||
acquire_attach_mutex (mutex_timeout);
|
||||
WriteConsoleInputW (p->input_handle, input_tmp, n, &n);
|
||||
n = 0;
|
||||
while (n < total_read)
|
||||
DWORD l = 0;
|
||||
while (l < n)
|
||||
{
|
||||
DWORD len;
|
||||
WriteConsoleInputW (p->input_handle, input_rec + n,
|
||||
min (total_read - n, inrec_size1), &len);
|
||||
n += len;
|
||||
WriteConsoleInputW (p->input_handle, input_tmp + l,
|
||||
min (n - l, inrec_size1), &len);
|
||||
l += len;
|
||||
}
|
||||
release_attach_mutex ();
|
||||
goto skip_writeback;
|
||||
|
|
Loading…
Reference in New Issue