@@ -164,7 +164,7 @@ defmodule NextLS.Runtime do
164
164
% {
165
165
name: name ,
166
166
working_dir: working_dir ,
167
- compiler_ref: nil ,
167
+ compiler_refs: % { } ,
168
168
port: port ,
169
169
task_supervisor: task_supervisor ,
170
170
logger: logger ,
@@ -198,6 +198,8 @@ defmodule NextLS.Runtime do
198
198
end
199
199
200
200
def handle_call ( { :compile , opts } , from , % { node: node } = state ) do
201
+ for { _ref , { task_pid , _from } } <- state . compiler_refs , do: Process . exit ( task_pid , :kill )
202
+
201
203
task =
202
204
Task.Supervisor . async_nolink ( state . task_supervisor , fn ->
203
205
if opts [ :force ] do
@@ -224,21 +226,22 @@ defmodule NextLS.Runtime do
224
226
end
225
227
end )
226
228
227
- { :noreply , % { state | compiler_ref: % { task . ref => from } } }
229
+ { :noreply , % { state | compiler_refs: Map . put ( state . compiler_refs , task . ref , { task . pid , from } ) } }
228
230
end
229
231
230
232
@ impl GenServer
231
- def handle_info ( { ref , errors } , % { compiler_ref: compiler_ref } = state ) when is_map_key ( compiler_ref , ref ) do
233
+ def handle_info ( { ref , errors } , % { compiler_refs: compiler_refs } = state ) when is_map_key ( compiler_refs , ref ) do
232
234
Process . demonitor ( ref , [ :flush ] )
233
235
234
- GenServer . reply ( compiler_ref [ ref ] , errors )
236
+ orig = elem ( compiler_refs [ ref ] , 1 )
237
+ GenServer . reply ( orig , errors )
235
238
236
- { :noreply , % { state | compiler_ref: nil } }
239
+ { :noreply , % { state | compiler_refs: Map . delete ( compiler_refs , ref ) } }
237
240
end
238
241
239
- def handle_info ( { :DOWN , ref , :process , _pid , _reason } , % { compiler_ref: compiler_ref } = state )
240
- when is_map_key ( compiler_ref , ref ) do
241
- { :noreply , % { state | compiler_ref: nil } }
242
+ def handle_info ( { :DOWN , ref , :process , _pid , _reason } , % { compiler_refs: compiler_refs } = state )
243
+ when is_map_key ( compiler_refs , ref ) do
244
+ { :noreply , % { state | compiler_refs: Map . delete ( compiler_refs , ref ) } }
242
245
end
243
246
244
247
def handle_info ( { :DOWN , _ , :port , port , _ } , % { port: port } = state ) do
0 commit comments