From e9440aef1c6cc708b3bd531876658485cb60ec86 Mon Sep 17 00:00:00 2001 From: Adam Kocoloski Date: Sat, 3 Dec 2011 16:34:05 -0500 Subject: Trigger a GC when OS process is returned --- apps/couch/src/couch_os_process.erl | 3 +++ apps/couch/src/couch_proc_manager.erl | 1 + 2 files changed, 4 insertions(+) diff --git a/apps/couch/src/couch_os_process.erl b/apps/couch/src/couch_os_process.erl index 0c6f284f..fb4bd5a9 100644 --- a/apps/couch/src/couch_os_process.erl +++ b/apps/couch/src/couch_os_process.erl @@ -168,6 +168,9 @@ handle_cast({send, Data}, #os_proc{writer=Writer, idle=Idle}=OsProc) -> end; handle_cast(stop, OsProc) -> {stop, normal, OsProc}; +handle_cast(garbage_collect, #os_proc{idle=Idle} = OsProc) -> + erlang:garbage_collect(), + {noreply, OsProc, Idle}; handle_cast(Msg, #os_proc{idle=Idle}=OsProc) -> ?LOG_DEBUG("OS Proc: Unknown cast: ~p", [Msg]), {noreply, OsProc, Idle}. diff --git a/apps/couch/src/couch_proc_manager.erl b/apps/couch/src/couch_proc_manager.erl index 568608bc..d09893eb 100644 --- a/apps/couch/src/couch_proc_manager.erl +++ b/apps/couch/src/couch_proc_manager.erl @@ -67,6 +67,7 @@ handle_call({ret_proc, #proc{client=Ref, pid=Pid} = Proc}, _From, State) -> % #proc{} from our own table, so the alternative is to do a lookup in the % table before the insert. Don't know which approach is cheaper. case is_process_alive(Pid) of true -> + gen_server:cast(Pid, garbage_collect), ets:insert(State#state.tab, Proc); false -> ok end, {reply, true, State}; -- cgit v1.2.3