Skip to content
This repository was archived by the owner on Oct 8, 2025. It is now read-only.

Commit 8d21f38

Browse files
committed
Kill pending compilation tasks
1 parent 7648ec3 commit 8d21f38

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

lib/next_ls/runtime.ex

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)