[erlang-patches] [PATCH] erts: reduce smp locking time range in erts_garbage_collect

Jovi Zhang <>
Fri Dec 16 11:13:19 CET 2011


>From f8bb268d962808c6e64545afbbd0d2b0257afdb7 Mon Sep 17 00:00:00 2001
From: Jovi Zhang <>
Date: Fri, 9 Dec 2011 05:46:45 +0800
Subject: [PATCH] erts: reduce smp locking time range in erts_garbage_collect

get_now should be use out of process status locking, then
it can reduce smp locking time range in here.
---
erts/emulator/beam/erl_gc.c |    3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c
index eb2b945..bcda3bf 100644
--- a/erts/emulator/beam/erl_gc.c
+++ b/erts/emulator/beam/erl_gc.c
@@ -357,10 +357,11 @@ erts_garbage_collect(Process* p, int need,
Eterm* objv, int nobj)
    erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS);
    p->gcstatus = p->status;
    p->status = P_GARBING;
+    erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS);
+
    if (erts_system_monitor_long_gc != 0) {
       get_now(&ms1, &s1, &us1);
    }
-    erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS);

    ERTS_CHK_OFFHEAP(p);

--
1.7.2.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-erts-reduce-smp-locking-time-range-in-erts_garbage_c.patch
Type: application/octet-stream
Size: 1020 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-patches/attachments/20111216/86d77d67/attachment.obj>


More information about the erlang-patches mailing list