diff options
author | José Valim <jose.valim@plataformatec.com.br> | 2019-06-27 10:12:15 +0200 |
---|---|---|
committer | José Valim <jose.valim@plataformatec.com.br> | 2019-06-27 10:12:15 +0200 |
commit | 82b8c810049ed2409a041c5d8e36d7cf5ea663ef (patch) | |
tree | da64419c18c09964a6d9c977ed83121cc2ba8eac | |
parent | 7c8f18c148c8fccd1425f54b4170e8801aea5e73 (diff) | |
download | elixir-82b8c810049ed2409a041c5d8e36d7cf5ea663ef.tar.gz |
Make sure locals tracker can be stopped
-rw-r--r-- | lib/elixir/src/elixir_locals.erl | 20 |
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. |