summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2012-11-12 15:44:41 +0000
committerSimon MacMullen <simon@rabbitmq.com>2012-11-12 15:44:41 +0000
commita4778edbbf873a8172fb4c00b8730d9c534200a5 (patch)
tree326d6d8de583b77b0cde35c7da18450058ec6d37
parentbbff74af803829caa3f42b526338dd97731dabd7 (diff)
downloadrabbitmq-server-git-a4778edbbf873a8172fb4c00b8730d9c534200a5.tar.gz
Use background_gc when the memory alarm goes off.
-rw-r--r--src/background_gc.erl9
-rw-r--r--src/rabbit_alarm.erl2
2 files changed, 9 insertions, 2 deletions
diff --git a/src/background_gc.erl b/src/background_gc.erl
index 0753dd6770..64b86b1859 100644
--- a/src/background_gc.erl
+++ b/src/background_gc.erl
@@ -18,7 +18,7 @@
-behaviour(gen_server2).
--export([start_link/0]).
+-export([start_link/0, gc_all/0]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3]).
@@ -38,12 +38,19 @@ start_link() ->
gen_server2:start_link({local, ?MODULE}, ?MODULE, [],
[{timeout, infinity}]).
+gc_all() ->
+ gen_server2:call(?MODULE, gc_all, infinity).
+
%%----------------------------------------------------------------------------
init([]) ->
{ok, run_gc(#state{last_interval = ?IDEAL_INTERVAL}), hibernate,
{backoff, ?HIBERNATE_AFTER_MIN, ?HIBERNATE_AFTER_MIN, ?DESIRED_HIBERNATE}}.
+handle_call(gc_all, _From, State) ->
+ do_gc(),
+ {reply, ok, State, hibernate};
+
handle_call(Msg, _From, State) ->
{stop, {unexpected_call, Msg}, State}.
diff --git a/src/rabbit_alarm.erl b/src/rabbit_alarm.erl
index 675d369795..e5f8a1c4d2 100644
--- a/src/rabbit_alarm.erl
+++ b/src/rabbit_alarm.erl
@@ -58,7 +58,7 @@ start() ->
vm_memory_monitor, [MemoryWatermark,
fun (Alarm) ->
R = set_alarm(Alarm),
- [garbage_collect(P) || P <- processes()],
+ background_gc:gc_all(),
R
end,
fun clear_alarm/1]),