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

openSUSE Build Service is sponsored by