]> granicus.if.org Git - gc/commitdiff
Fix GC_print_trace missing unlock
authorIvan Maidanski <ivmai@mail.ru>
Sun, 23 Dec 2012 08:53:34 +0000 (12:53 +0400)
committerIvan Maidanski <ivmai@mail.ru>
Sun, 23 Dec 2012 08:53:34 +0000 (12:53 +0400)
* mark.c (GC_print_trace): Perform UNLOCK (if "lock" is on) before
return (inside loop).

mark.c

diff --git a/mark.c b/mark.c
index 9d03ccdec43af6348f831791c69dd2aed53d6042..8ef7c57524a4babc46cfe1cfc26094d30b027f58 100644 (file)
--- a/mark.c
+++ b/mark.c
@@ -1463,7 +1463,10 @@ void GC_print_trace(word gc_no, GC_bool 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) return;
+        if (p -> gc_no < gc_no || p -> kind == 0) {
+            if (lock) UNLOCK();
+            return;
+        }
         printf("Trace:%s (gc:%u,bytes:%lu) 0x%X, 0x%X\n",
                 p -> kind, (unsigned)p -> gc_no,
                 (unsigned long)p -> bytes_allocd,