summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ebin/rabbit.app2
-rw-r--r--src/rabbit.erl4
-rw-r--r--src/rabbit_alarm.erl25
3 files changed, 21 insertions, 10 deletions
diff --git a/ebin/rabbit.app b/ebin/rabbit.app
index 5c99f516..93abd456 100644
--- a/ebin/rabbit.app
+++ b/ebin/rabbit.app
@@ -49,4 +49,4 @@
{default_user, <<"guest">>},
{default_pass, <<"guest">>},
{default_vhost, <<"/">>},
- {start_memsup, false}]}]}.
+ {memory_alarms, false}]}]}.
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 9dc2219b..41064c77 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -163,8 +163,8 @@ start(normal, []) ->
ok = rabbit_amqqueue:start(),
- {ok, ShouldStartMemsup} = application:get_env(start_memsup),
- ok = rabbit_alarm:start(ShouldStartMemsup),
+ {ok, MemoryAlarms} = application:get_env(memory_alarms),
+ ok = rabbit_alarm:start(MemoryAlarms),
ok = rabbit_binary_generator:
check_empty_content_body_frame_size(),
diff --git a/src/rabbit_alarm.erl b/src/rabbit_alarm.erl
index 43c4ad90..7bbed8b7 100644
--- a/src/rabbit_alarm.erl
+++ b/src/rabbit_alarm.erl
@@ -55,12 +55,12 @@
%%----------------------------------------------------------------------------
-start(StartMemsup) ->
- ok = alarm_handler:add_alarm_handler(?MODULE),
+start(MemoryAlarms) ->
+ ok = alarm_handler:add_alarm_handler(?MODULE, [MemoryAlarms]),
case whereis(memsup) of
- undefined -> if StartMemsup -> ok = start_memsup(),
- ok = adjust_memsup_interval();
- true -> ok
+ undefined -> if MemoryAlarms -> ok = start_memsup(),
+ ok = adjust_memsup_interval();
+ true -> ok
end;
_ -> ok = adjust_memsup_interval()
end.
@@ -74,9 +74,15 @@ register(Pid, HighMemMFA) ->
%%----------------------------------------------------------------------------
-init([]) ->
- {ok, #alarms{alertees = dict:new()}}.
+init([MemoryAlarms]) ->
+ {ok, #alarms{alertees = case MemoryAlarms of
+ true -> dict:new();
+ false -> undefined
+ end}}.
+handle_call({register, _Pid, _HighMemMFA},
+ State = #alarms{alertees = undefined}) ->
+ {ok, ok, State};
handle_call({register, Pid, HighMemMFA},
State = #alarms{alertees = Alertess}) ->
_MRef = erlang:monitor(process, Pid),
@@ -102,6 +108,9 @@ handle_event({clear_alarm, system_memory_high_watermark}, State) ->
handle_event(_Event, State) ->
{ok, State}.
+handle_info({'DOWN', _MRef, process, _Pid, _Reason},
+ State = #alarms{alertees = undefined}) ->
+ {ok, State};
handle_info({'DOWN', _MRef, process, Pid, _Reason},
State = #alarms{alertees = Alertess}) ->
{ok, State#alarms{alertees = dict:erase(Pid, Alertess)}};
@@ -165,6 +174,8 @@ adjust_memsup_interval() ->
{set_check_interval, ?MEMSUP_CHECK_INTERVAL},
infinity).
+alert(_Alert, undefined) ->
+ ok;
alert(Alert, Alertees) ->
dict:fold(fun (Pid, {M, F, A}, Acc) ->
ok = erlang:apply(M, F, A ++ [Pid, Alert]),