@@ -198,6 +198,8 @@ defmodule NextLS.Runtime do
198198 end
199199
200200 def handle_call ( { :compile , opts } , from , % { node: node } = state ) do
201+ stop_pending_compilations ( state )
202+
201203 task =
202204 Task.Supervisor . async_nolink ( state . task_supervisor , fn ->
203205 if opts [ :force ] do
@@ -224,14 +226,15 @@ defmodule NextLS.Runtime do
224226 end
225227 end )
226228
227- { :noreply , % { state | compiler_refs: Map . put ( state . compiler_refs , task . ref , from ) } }
229+ { :noreply , % { state | compiler_refs: Map . put ( state . compiler_refs , task . ref , { task . pid , from } ) } }
228230 end
229231
230232 @ impl GenServer
231233 def handle_info ( { ref , errors } , % { compiler_refs: compiler_refs } = state ) when is_map_key ( compiler_refs , ref ) do
232234 Process . demonitor ( ref , [ :flush ] )
233235
234- GenServer . reply ( compiler_refs [ ref ] , errors )
236+ orig = elem ( compiler_refs [ ref ] , 1 )
237+ GenServer . reply ( orig , errors )
235238
236239 { :noreply , % { state | compiler_refs: Map . delete ( compiler_refs , ref ) } }
237240 end
@@ -274,6 +277,12 @@ defmodule NextLS.Runtime do
274277 { :noreply , state }
275278 end
276279
280+ defp stop_pending_compilations ( % { compiler_refs: % { } } ) , do: :ok
281+ defp stop_pending_compilations ( % { compiler_refs: refs } ) do
282+ for { _ref , { task_pid , _from } } <- refs , do: Process . exit ( task_pid , :kill )
283+ :ok
284+ end
285+
277286 defp connect ( _node , _port , 0 ) do
278287 false
279288 end
0 commit comments