commit
d425d42424
|
@ -58,7 +58,7 @@ init([]) ->
|
||||||
{ok, ensure_timer(#{timer => undefined})}.
|
{ok, ensure_timer(#{timer => undefined})}.
|
||||||
|
|
||||||
handle_call(run, _From, State) ->
|
handle_call(run, _From, State) ->
|
||||||
{Time, _} = timer:tc(fun run_gc/0),
|
{Time, ok} = timer:tc(fun run_gc/0),
|
||||||
{reply, {ok, Time div 1000}, State, hibernate};
|
{reply, {ok, Time div 1000}, State, hibernate};
|
||||||
|
|
||||||
handle_call(_Req, _From, State) ->
|
handle_call(_Req, _From, State) ->
|
||||||
|
@ -68,7 +68,7 @@ handle_cast(_Msg, State) ->
|
||||||
{noreply, State}.
|
{noreply, State}.
|
||||||
|
|
||||||
handle_info({timeout, TRef, run}, State = #{timer := TRef}) ->
|
handle_info({timeout, TRef, run}, State = #{timer := TRef}) ->
|
||||||
run_gc(),
|
ok = run_gc(),
|
||||||
{noreply, ensure_timer(State), hibernate};
|
{noreply, ensure_timer(State), hibernate};
|
||||||
|
|
||||||
handle_info(_Info, State) ->
|
handle_info(_Info, State) ->
|
||||||
|
@ -91,7 +91,12 @@ ensure_timer(State) ->
|
||||||
State#{timer := TRef}
|
State#{timer := TRef}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
run_gc() ->
|
run_gc() -> lists:foreach(fun do_gc/1, processes()).
|
||||||
[garbage_collect(P) || P <- processes(),
|
|
||||||
{status, waiting} == process_info(P, status)].
|
do_gc(Pid) ->
|
||||||
|
is_waiting(Pid) andalso garbage_collect(Pid, [{type, 'minor'}]).
|
||||||
|
|
||||||
|
-compile({inline, [is_waiting/1]}).
|
||||||
|
is_waiting(Pid) ->
|
||||||
|
{status, waiting} == process_info(Pid, status).
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue