From 263e1f59f718d62b5dc56d3e0fc14f7ab059710c Mon Sep 17 00:00:00 2001 From: Badlop Date: Fri, 27 Jun 2025 16:38:46 +0200 Subject: [PATCH] Fix problem calling get_log_path when ejabberd is stopping When ejabberd is being stopped and some module calls ejabberd_logger:get_log_path(), application:load/1 crashes with error: ** Reason for termination == ** {terminating, [{application_controller,call,2, [{file,"application_controller.erl"},{line,511}]}, {application,load1,2,[{file,"application.erl"},{line,274}]}, {ejabberd_config,env_binary_to_list,2, [{file,"/home/git/ejabberd/src/ejabberd_config.erl"}, {line,343}]}, {ejabberd_logger,get_log_path,0, [{file,"/home/git/ejabberd/src/ejabberd_logger.erl"}, {line,55}]}, --- src/ejabberd_config.erl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ejabberd_config.erl b/src/ejabberd_config.erl index 89f89504d..a1bf043a6 100644 --- a/src/ejabberd_config.erl +++ b/src/ejabberd_config.erl @@ -340,7 +340,12 @@ may_hide_data(Data) -> -spec env_binary_to_list(atom(), atom()) -> {ok, any()} | undefined. env_binary_to_list(Application, Parameter) -> %% Application need to be loaded to allow setting parameters - application:load(Application), + case proplists:is_defined(Application, application:loaded_applications()) of + true -> + ok; + false -> + application:load(Application) + end, case application:get_env(Application, Parameter) of {ok, Val} when is_binary(Val) -> BVal = binary_to_list(Val),