File 0275-kernel-Fix-race-when-upgrading-tty-on-Windows.patch of Package erlang
From 99b05ef4809a431b65430dcca7574e8e0a1fb7df Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang.org>
Date: Mon, 2 Sep 2024 15:37:04 +0200
Subject: [PATCH] kernel: Fix race when upgrading tty on Windows
---
lib/kernel/src/prim_tty.erl | 23 ++++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/lib/kernel/src/prim_tty.erl b/lib/kernel/src/prim_tty.erl
index 0fe13b84b8..5c1f3aa55b 100644
--- a/lib/kernel/src/prim_tty.erl
+++ b/lib/kernel/src/prim_tty.erl
@@ -276,13 +276,22 @@ init_term(State = #state{ tty = TTY, options = Options }) ->
TTYState =
case maps:get(tty, Options) of
true ->
- case tty_init(TTY, stdout, Options) of
- ok -> ok;
- {error, enotsup} -> error(enotsup)
- end,
- NewState = init(State, os:type()),
- ok = tty_set(TTY),
- NewState;
+ %% If a reader has been started already, we disable it to avoid race conditions when
+ %% upgrading the terminal
+ [disable_reader(State) || State#state.reader =/= undefined],
+
+ try
+ case tty_init(TTY, stdout, Options) of
+ ok -> ok;
+ {error, enotsup} -> error(enotsup)
+ end,
+ NewState = init(State, os:type()),
+ ok = tty_set(TTY),
+
+ NewState
+ after
+ [enable_reader(State) || State#state.reader =/= undefined]
+ end;
false ->
State
end,
--
2.43.0