Skip to content

Commit 992c240

Browse files
author
José Valim
committed
Ensure exit propagation only to non-root evaluators, closes #7255
1 parent 79ae08f commit 992c240

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

lib/iex/lib/iex/evaluator.ex

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ defmodule IEx.Evaluator do
1414
old_leader = Process.group_leader()
1515
Process.group_leader(self(), leader)
1616

17-
evaluator? = !!Process.get(:iex_evaluator)
18-
Process.put(:iex_evaluator, true)
17+
evaluator = Process.get(:iex_evaluator)
18+
Process.put(:iex_evaluator, command)
1919

2020
state = loop_state(server, IEx.History.init(), opts)
2121
command == :ack && :proc_lib.init_ack(self())
@@ -25,11 +25,16 @@ defmodule IEx.Evaluator do
2525
after
2626
Process.group_leader(self(), old_leader)
2727

28-
# If there was an evaluator, nest failures.
29-
if evaluator? do
30-
send(self(), {:done, server})
31-
else
32-
Process.delete(:iex_evaluator)
28+
cond do
29+
is_nil(evaluator) ->
30+
Process.delete(:iex_evaluator)
31+
32+
evaluator != :ack ->
33+
# Ensure propagation to non-root level evaluators
34+
send(self(), {:done, server})
35+
36+
true ->
37+
:ok
3338
end
3439

3540
:ok

0 commit comments

Comments
 (0)