Skip to content

Commit e137abe

Browse files
committed
be more strict with tracer errors
1 parent 585345a commit e137abe

File tree

1 file changed

+24
-2
lines changed
  • apps/language_server/lib/language_server

1 file changed

+24
-2
lines changed

apps/language_server/lib/language_server/tracer.ex

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,17 @@ defmodule ElixirLS.LanguageServer.Tracer do
150150
%{}
151151
)
152152

153-
Logger.info("Terminating #{__MODULE__}: #{message}")
153+
JsonRpc.show_message(
154+
:error,
155+
"Tracer process exited due to critical error"
156+
)
157+
158+
Logger.error("Terminating #{__MODULE__}: #{message}")
159+
160+
unless Application.get_env(:language_server, :test_mode) do
161+
Process.sleep(2000)
162+
System.halt(1)
163+
end
154164
end
155165
end
156166

@@ -172,14 +182,26 @@ defmodule ElixirLS.LanguageServer.Tracer do
172182
table_name = table_name(table)
173183
path = dets_path(project_dir, table)
174184

175-
opts = [file: path |> String.to_charlist(), auto_save: 60_000]
185+
opts = [file: path |> String.to_charlist(), auto_save: 60_000, repair: true]
176186

177187
:ok = path |> Path.dirname() |> File.mkdir_p()
178188

179189
case :dets.open_file(table_name, opts) do
180190
{:ok, _} ->
181191
:ok
182192

193+
{:error, {:needs_repair, _} = reason} ->
194+
Logger.warning("Unable to open DETS #{path}: #{inspect(reason)}")
195+
File.rm_rf!(path)
196+
197+
{:ok, _} = :dets.open_file(table_name, opts)
198+
199+
{:error, {:repair_failed, _} = reason} ->
200+
Logger.warning("Unable to open DETS #{path}: #{inspect(reason)}")
201+
File.rm_rf!(path)
202+
203+
{:ok, _} = :dets.open_file(table_name, opts)
204+
183205
{:error, {:not_a_dets_file, _} = reason} ->
184206
Logger.warning("Unable to open DETS #{path}: #{inspect(reason)}")
185207
File.rm_rf!(path)

0 commit comments

Comments
 (0)