diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit.erl | 12 | ||||
| -rw-r--r-- | src/rabbit_plugins.erl | 15 |
2 files changed, 15 insertions, 12 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl index 9f78a58a7a..9018161991 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -395,20 +395,8 @@ stop_apps(Apps) -> false -> run_cleanup_steps(Apps); %% plugin deactivation true -> ok %% it's all going anyway end, - unload_apps(Apps), ok. -unload_apps(Apps) -> - [begin - {ok, Mods} = application:get_key(App, modules), - [begin - code:soft_purge(Mod), - code:delete(Mod), - false = code:is_loaded(Mod) - end || Mod <- Mods], - application:unload(App) - end || App <- Apps]. - handle_app_error(Term) -> fun(App, {bad_return, {_MFA, {'EXIT', {ExitReason, _}}}}) -> throw({Term, App, ExitReason}); diff --git a/src/rabbit_plugins.erl b/src/rabbit_plugins.erl index e139eed4a5..0eabf4dd48 100644 --- a/src/rabbit_plugins.erl +++ b/src/rabbit_plugins.erl @@ -49,6 +49,7 @@ ensure(Wanted) -> {disabled, Stop}]), rabbit:start_apps(Start), rabbit:stop_apps(Stop), + clean_plugins(Stop), {ok, Start, Stop}. %% @doc Prepares the file system and installs all enabled plugins. @@ -153,6 +154,20 @@ prepare_plugins(Enabled) -> [prepare_dir_plugin(PluginAppDescPath) || PluginAppDescPath <- filelib:wildcard(ExpandDir ++ "/*/ebin/*.app")]. +clean_plugins(Plugins) -> + {ok, ExpandDir} = application:get_env(rabbit, plugins_expand_dir), + [clean_plugin(Plugin, ExpandDir) || Plugin <- Plugins]. + +clean_plugin(Plugin, ExpandDir) -> + {ok, Mods} = application:get_key(Plugin, modules), + application:unload(Plugin), + [begin + code:soft_purge(Mod), + code:delete(Mod), + false = code:is_loaded(Mod) + end || Mod <- Mods], + delete_recursively(rabbit_misc:format("~s/~s", [ExpandDir, Plugin])). + prepare_dir_plugin(PluginAppDescPath) -> code:add_path(filename:dirname(PluginAppDescPath)), list_to_atom(filename:basename(PluginAppDescPath, ".app")). |
