aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel/src/error_logger.erl
diff options
context:
space:
mode:
authorSiri Hansen <[email protected]>2018-07-06 15:27:42 +0200
committerSiri Hansen <[email protected]>2018-07-13 12:20:26 +0200
commit0a4834e59f2aac7b76331410bcee641d375d8ec0 (patch)
treea81ce74a20a33777f5f5c2d45cb908b6bf560b74 /lib/kernel/src/error_logger.erl
parent4ae5136ccb68bed0e72e1f45d34d1a8b44594590 (diff)
downloadotp-0a4834e59f2aac7b76331410bcee641d375d8ec0.tar.gz
otp-0a4834e59f2aac7b76331410bcee641d375d8ec0.tar.bz2
otp-0a4834e59f2aac7b76331410bcee641d375d8ec0.zip
[kernel] Reduce risk of dead lock when terminating logger_sup
Diffstat (limited to 'lib/kernel/src/error_logger.erl')
-rw-r--r--lib/kernel/src/error_logger.erl15
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/kernel/src/error_logger.erl b/lib/kernel/src/error_logger.erl
index a7e7f19167..ad8c937882 100644
--- a/lib/kernel/src/error_logger.erl
+++ b/lib/kernel/src/error_logger.erl
@@ -74,8 +74,8 @@ start() ->
type => worker,
modules => dynamic},
case supervisor:start_child(logger_sup, ErrorLogger) of
- {ok,_} ->
- ok;
+ {ok,Pid} ->
+ ok = logger_handler_watcher:register_handler(?MODULE,Pid);
Error ->
Error
end;
@@ -95,9 +95,14 @@ start_link() ->
%%% Stop the event manager
-spec stop() -> ok.
stop() ->
- _ = supervisor:terminate_child(logger_sup,?MODULE),
- _ = supervisor:delete_child(logger_sup,?MODULE),
- ok.
+ case whereis(?MODULE) of
+ undefined ->
+ ok;
+ _Pid ->
+ _ = gen_event:stop(?MODULE,{shutdown,stopped},infinity),
+ _ = supervisor:delete_child(logger_sup,?MODULE),
+ ok
+ end.
%%%-----------------------------------------------------------------
%%% Callbacks for logger