mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-03-03 21:45:51 +08:00
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
746c8116dd
commit
2c2c2b631b
@ -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,
|
||||
@ -478,7 +479,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,
|
||||
@ -493,14 +495,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…
x
Reference in New Issue
Block a user