]> granicus.if.org Git - gc/commitdiff
Move GC_print_trace code inside LOCK/UNLOCK to GC_print_trace_inner
authorIvan Maidanski <ivmai@mail.ru>
Sun, 23 Dec 2012 09:25:59 +0000 (13:25 +0400)
committerIvan Maidanski <ivmai@mail.ru>
Sun, 23 Dec 2012 09:25:59 +0000 (13:25 +0400)
(code refactoring)

* mark.c (GC_print_trace_inner): New function (only if TRACE_BUF).
* mark.c (GC_print_trace): Move code to GC_print_trace_inner (except
for LOCK/UNLOCK); invoke GC_print_trace_inner (either with lock held
or not depending on "lock" variable value).

mark.c

diff --git a/mark.c b/mark.c
index 08753b67cfb51f7169174c02458e2f04a49fbe91..ccce7bf72f36a8f224101febf43b6b76ee5c4fe3 100644 (file)
--- a/mark.c
+++ b/mark.c
@@ -1453,18 +1453,15 @@ void GC_add_trace_entry(char *kind, word arg1, word arg2)
     if (GC_trace_buf_ptr >= TRACE_ENTRIES) GC_trace_buf_ptr = 0;
 }
 
-void GC_print_trace(word gc_no, GC_bool lock)
+void GC_print_trace_inner(word gc_no)
 {
     int i;
     struct trace_entry *p;
-    DCL_LOCK_STATE;
 
-    if (lock) LOCK();
     for (i = GC_trace_buf_ptr-1; i != GC_trace_buf_ptr; i--) {
         if (i < 0) i = TRACE_ENTRIES-1;
         p = GC_trace_buf + i;
         if (p -> gc_no < gc_no || p -> kind == 0) {
-            if (lock) UNLOCK();
             return;
         }
         GC_printf("Trace:%s (gc:%u, bytes:%lu) 0x%lX, 0x%lX\n",
@@ -1473,7 +1470,19 @@ void GC_print_trace(word gc_no, GC_bool lock)
                   (long)p->arg1 ^ 0x80000000L, (long)p->arg2 ^ 0x80000000L);
     }
     GC_printf("Trace incomplete\n");
-    if (lock) UNLOCK();
+}
+
+void GC_print_trace(word gc_no, GC_bool lock)
+{
+    DCL_LOCK_STATE;
+
+    if (lock) {
+      LOCK();
+      GC_print_trace_inner(gc_no);
+      UNLOCK();
+    } else {
+      GC_print_trace_inner(gc_no);
+    }
 }
 
 # endif /* TRACE_BUF */