summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rabbit_log.erl18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/rabbit_log.erl b/src/rabbit_log.erl
index ed73a293ca..5b5468cab7 100644
--- a/src/rabbit_log.erl
+++ b/src/rabbit_log.erl
@@ -96,7 +96,7 @@ with_local_io(Fun) ->
Node = node(),
case node(GL) of
Node -> Fun();
- _ -> set_group_leader_to_user(),
+ _ -> set_group_leader_to_user_safely(whereis(user)),
try
Fun()
after
@@ -104,10 +104,12 @@ with_local_io(Fun) ->
end
end.
-set_group_leader_to_user() ->
- case whereis(user) of
- undefined ->
- warning("the 'user' I/O process has terminated, some features will fail until Erlang VM is restarted");
- User ->
- group_leader(User, self())
- end.
+set_group_leader_to_user_safely(undefined) ->
+ handle_damaged_io_system();
+set_group_leader_to_user_safely(User) when is_pid(User) ->
+ group_leader(User, self()).
+
+handle_damaged_io_system() ->
+ Msg = "Erlang VM I/O system is damaged, restart needed~n",
+ io:format(standard_error, Msg, []),
+ exit(erlang_vm_restart_needed).