mirror of
https://github.com/python/cpython.git
synced 2024-11-24 10:24:35 +08:00
bpo-30237: Output error when ReadConsole is canceled by CancelSynchronousIo. (GH-7911)
This commit is contained in:
parent
81950495ba
commit
ce75df3031
@ -0,0 +1,2 @@
|
||||
Output error when ReadConsole is canceled by CancelSynchronousIo instead of
|
||||
crashing.
|
@ -556,7 +556,8 @@ read_console_w(HANDLE handle, DWORD maxlen, DWORD *readlen) {
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
DWORD off = 0;
|
||||
while (off < maxlen) {
|
||||
DWORD n, len = min(maxlen - off, BUFSIZ);
|
||||
DWORD n = (DWORD)-1;
|
||||
DWORD len = min(maxlen - off, BUFSIZ);
|
||||
SetLastError(0);
|
||||
BOOL res = ReadConsoleW(handle, &buf[off], len, &n, NULL);
|
||||
|
||||
@ -564,6 +565,9 @@ read_console_w(HANDLE handle, DWORD maxlen, DWORD *readlen) {
|
||||
err = GetLastError();
|
||||
break;
|
||||
}
|
||||
if (n == (DWORD)-1 && (err = GetLastError()) == ERROR_OPERATION_ABORTED) {
|
||||
break;
|
||||
}
|
||||
if (n == 0) {
|
||||
err = GetLastError();
|
||||
if (err != ERROR_OPERATION_ABORTED)
|
||||
|
@ -109,7 +109,7 @@ _PyOS_WindowsConsoleReadline(HANDLE hStdIn)
|
||||
char *buf = NULL;
|
||||
int err = 0;
|
||||
|
||||
n_read = 0;
|
||||
n_read = (DWORD)-1;
|
||||
total_read = 0;
|
||||
wbuf = wbuf_local;
|
||||
wbuflen = sizeof(wbuf_local) / sizeof(wbuf_local[0]) - 1;
|
||||
@ -121,6 +121,9 @@ _PyOS_WindowsConsoleReadline(HANDLE hStdIn)
|
||||
err = GetLastError();
|
||||
goto exit;
|
||||
}
|
||||
if (n_read == (DWORD)-1 && (err = GetLastError()) == ERROR_OPERATION_ABORTED) {
|
||||
break;
|
||||
}
|
||||
if (n_read == 0) {
|
||||
int s;
|
||||
err = GetLastError();
|
||||
|
Loading…
Reference in New Issue
Block a user