@@ -34,13 +34,11 @@ defmodule IEx.Server do
3434 current process.
3535 """
3636 @ spec take_over ( binary , Keyword . t , pos_integer ) ::
37- :ok | { :error , :self } | { :error , : no_iex } | { :error , :refused }
37+ :ok | { :error , :no_iex } | { :error , :refused }
3838 def take_over ( identifier , opts , timeout // 1000 , server // whereis ( ) ) do
3939 cond do
4040 nil? ( server ) ->
4141 { :error , :no_iex }
42- whereis_evaluator ( server ) == self ->
43- { :error , :self }
4442 true ->
4543 ref = make_ref ( )
4644 server <- { :take? , self , ref }
@@ -63,13 +61,6 @@ defmodule IEx.Server do
6361 end
6462 end
6563
66- defp whereis_evaluator ( server ) do
67- case server && Process . info ( server , :dictionary ) do
68- { :dictionary , dict } -> dict [ :evaluator ]
69- _ -> nil
70- end
71- end
72-
7364 @ doc """
7465 Starts IEx by executing a given callback and spawning
7566 the server only after the callback is done.
@@ -126,15 +117,17 @@ defmodule IEx.Server do
126117 end
127118
128119 defp reset_loop ( opts , evaluator , evaluator_ref ) do
129- exit_loop ( evaluator , evaluator_ref )
120+ exit_loop ( evaluator , evaluator_ref , opts [ :evaluator ] != evaluator )
130121 IO . write [ IO.ANSI . home , IO.ANSI . clear ]
131122 run ( opts )
132123 end
133124
134- defp exit_loop ( evaluator , evaluator_ref ) do
125+ defp exit_loop ( evaluator , evaluator_ref , done? // true ) do
135126 Process . delete ( :evaluator )
136127 Process . demonitor ( evaluator_ref )
137- evaluator <- { :done , self }
128+ if done? do
129+ evaluator <- { :done , self }
130+ end
138131 :ok
139132 end
140133
0 commit comments