From 567a8276de0b146bfcbf6e81626d11694ca8edf8 Mon Sep 17 00:00:00 2001 From: Dan Gudmundsson Date: Thu, 27 Oct 2011 11:01:36 +0200 Subject: [mnesia] Cleanly bring down mnesia Aviods failing/wobbling testcase. Mnesia mishandled supervisors. --- lib/mnesia/src/mnesia_monitor.erl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lib/mnesia/src/mnesia_monitor.erl') diff --git a/lib/mnesia/src/mnesia_monitor.erl b/lib/mnesia/src/mnesia_monitor.erl index e110ad3241..8cb2e92c08 100644 --- a/lib/mnesia/src/mnesia_monitor.erl +++ b/lib/mnesia/src/mnesia_monitor.erl @@ -536,7 +536,11 @@ handle_info({'EXIT', Pid, R}, State) when Pid == State#state.supervisor -> handle_info({'EXIT', Pid, fatal}, State) when node(Pid) == node() -> dbg_out("~p got FATAL ERROR from: ~p~n",[?MODULE, Pid]), - exit(State#state.supervisor, shutdown), + %% This may hang supervisor if a shutdown happens at the same time as an fatal + %% is in progress + %% exit(State#state.supervisor, shutdown), + %% It is better to kill an innocent process + catch exit(whereis(mnesia_locker), kill), {noreply, State}; handle_info(Msg = {'EXIT',Pid,_}, State) -> -- cgit v1.2.3