diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_feature_flags.erl | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/rabbit_feature_flags.erl b/src/rabbit_feature_flags.erl index db13b7347e..de9dae2c9f 100644 --- a/src/rabbit_feature_flags.erl +++ b/src/rabbit_feature_flags.erl @@ -1255,8 +1255,8 @@ load_registry_mod(Mod, Bin) -> %% Time to load the new registry, replacing the old one. We use a %% lock here to synchronize concurrent reloads. global:set_lock(?FF_REGISTRY_LOADING_LOCK, [node()]), - _ = code:soft_purge(Mod), - _ = code:delete(Mod), + ok = purge_old_registry(Mod), + true = code:delete(Mod), Ret = code:load_binary(Mod, FakeFilename, Bin), global:del_lock(?FF_REGISTRY_LOADING_LOCK, [node()]), case Ret of @@ -1271,6 +1271,18 @@ load_registry_mod(Mod, Bin) -> throw({feature_flag_registry_reload_failure, Reason}) end. +purge_old_registry(Mod) -> + case code:is_loaded(Mod) of + {file, _} -> do_purge_old_registry(Mod); + false -> ok + end. + +do_purge_old_registry(Mod) -> + case code:soft_purge(Mod) of + true -> ok; + false -> do_purge_old_registry(Mod) + end. + %% ------------------------------------------------------------------- %% Feature flags state storage. %% ------------------------------------------------------------------- |
