Co-authored-by: ValeriyaSinevich <valeriya.sinevich@phystech.edu>
--- /dev/null
+Output error when ReadConsole is canceled by CancelSynchronousIo instead of
+crashing.
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);
err = GetLastError();
break;
}
+ if (n == (DWORD)-1 && (err = GetLastError()) == ERROR_OPERATION_ABORTED) {
+ break;
+ }
if (n == 0) {
err = GetLastError();
if (err != ERROR_OPERATION_ABORTED)
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;
err = GetLastError();
goto exit;
}
+ if (n_read == (DWORD)-1 && (err = GetLastError()) == ERROR_OPERATION_ABORTED) {
+ break;
+ }
if (n_read == 0) {
int s;
err = GetLastError();