win,tty: fix deadlock caused by inconsistent state
The variable uv__read_console_status is left as IN_PROGRESS when the operation is canceled ahead of time by the main thread requesting a trap (race condition?). This confuses the next call to uv__cancel_read_console(...) causing a deadlock due to a semaphore acquisition that is never released by the reading thread. Setting the status variable back to COMPLETE or NOT_STARTED fixes the issue. Ref: https://github.com/nodejs/node/issues/32999 PR-URL: https://github.com/libuv/libuv/pull/2882 Reviewed-By: Bartosz Sosnowski <bartosz@janeasystems.com>
This commit is contained in:
parent
ff3ab317a2
commit
aeab873bbe
@ -517,6 +517,7 @@ static DWORD CALLBACK uv_tty_line_read_thread(void* data) {
|
||||
status = InterlockedExchange(&uv__read_console_status, IN_PROGRESS);
|
||||
if (status == TRAP_REQUESTED) {
|
||||
SET_REQ_SUCCESS(req);
|
||||
InterlockedExchange(&uv__read_console_status, COMPLETED);
|
||||
req->u.io.overlapped.InternalHigh = 0;
|
||||
POST_COMPLETION_FOR_REQ(loop, req);
|
||||
return 0;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user