summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@plataformatec.com.br>2019-06-27 10:12:15 +0200
committerJosé Valim <jose.valim@plataformatec.com.br>2019-06-27 10:12:15 +0200
commit82b8c810049ed2409a041c5d8e36d7cf5ea663ef (patch)
treeda64419c18c09964a6d9c977ed83121cc2ba8eac
parent7c8f18c148c8fccd1425f54b4170e8801aea5e73 (diff)
downloadelixir-82b8c810049ed2409a041c5d8e36d7cf5ea663ef.tar.gz
Make sure locals tracker can be stopped
-rw-r--r--lib/elixir/src/elixir_locals.erl20
1 files changed, 15 insertions, 5 deletions
diff --git a/lib/elixir/src/elixir_locals.erl b/lib/elixir/src/elixir_locals.erl
index 48cfe0566..fe02771cc 100644
--- a/lib/elixir/src/elixir_locals.erl
+++ b/lib/elixir/src/elixir_locals.erl
@@ -10,15 +10,22 @@
-include("elixir.hrl").
-define(cache, {elixir, cache_env}).
+-define(locals, {elixir, locals}).
-define(tracker, 'Elixir.Module.LocalsTracker').
setup({DataSet, _DataBag}) ->
ets:insert(DataSet, {?cache, 0, nil}),
- ok.
-stop({_DataSet, _DataBag}) ->
+ case elixir_config:get(bootstrap) of
+ false -> ets:insert(DataSet, {?locals, true});
+ true -> ok
+ end,
+
ok.
+stop({DataSet, _DataBag}) ->
+ ets:delete(DataSet, ?locals).
+
yank(Tuple, Module) ->
if_tracker(Module, fun(Tracker) -> ?tracker:yank(Tracker, Tuple) end).
@@ -44,9 +51,12 @@ if_tracker(Module, Callback) ->
if_tracker(Module, ok, Callback).
if_tracker(Module, Default, Callback) ->
- try {elixir_config:get(bootstrap), elixir_module:data_tables(Module)} of
- {true, _Tracker} -> Default;
- {false, Tracker} -> Callback(Tracker)
+ try
+ {DataSet, _} = Tables = elixir_module:data_tables(Module),
+ {ets:member(DataSet, ?locals), Tables}
+ of
+ {true, Tracker} -> Callback(Tracker);
+ {false, _} -> Default
catch
error:badarg -> Default
end.