guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] GNU Guile branch, master, updated. v2.1.0-764-gc65ea59


From: Andy Wingo
Subject: [Guile-commits] GNU Guile branch, master, updated. v2.1.0-764-gc65ea59
Date: Fri, 21 Feb 2014 14:10:15 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Guile".

http://git.savannah.gnu.org/cgit/guile.git/commit/?id=c65ea594e92ebf6fb30ece92b063501c8abedf72

The branch, master has been updated
       via  c65ea594e92ebf6fb30ece92b063501c8abedf72 (commit)
      from  c53d0f01ddebea16f816349c9813fe9ffdd38a1d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit c65ea594e92ebf6fb30ece92b063501c8abedf72
Author: Andy Wingo <address@hidden>
Date:   Fri Feb 21 14:42:24 2014 +0100

    Fix segfault in thread_mark
    
    * libguile/threads.c (thread_mark): There is a window in which the
      thread has a handle but doesn't yet have the set of pointerless
      freelists, so don't unconditionally dereference
      t->pointerless_freelists.

-----------------------------------------------------------------------

Summary of changes:
 libguile/threads.c |   31 ++++++++++++++++---------------
 1 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/libguile/threads.c b/libguile/threads.c
index 7902a9a..dd04f6f 100644
--- a/libguile/threads.c
+++ b/libguile/threads.c
@@ -100,21 +100,22 @@ thread_mark (GC_word *addr, struct GC_ms_entry 
*mark_stack_ptr,
      but GC doesn't know to trace them (as they are pointerless), so we
      need to do that here.  See the comments at the top of libgc's
      gc_inline.h.  */
-  {
-    size_t n;
-    for (n = 0; n < SCM_INLINE_GC_FREELIST_COUNT; n++)
-      {
-        void *chain = t->pointerless_freelists[n];
-        if (chain)
-          {
-            /* The first link is already marked by the freelist vector,
-               so we just have to mark the tail.  */
-            while ((chain = *(void **)chain))
-              mark_stack_ptr = GC_mark_and_push (chain, mark_stack_ptr,
-                                                 mark_stack_limit, NULL);
-          }
-      }
-  }
+  if (t->pointerless_freelists)
+    {
+      size_t n;
+      for (n = 0; n < SCM_INLINE_GC_FREELIST_COUNT; n++)
+        {
+          void *chain = t->pointerless_freelists[n];
+          if (chain)
+            {
+              /* The first link is already marked by the freelist vector,
+                 so we just have to mark the tail.  */
+              while ((chain = *(void **)chain))
+                mark_stack_ptr = GC_mark_and_push (chain, mark_stack_ptr,
+                                                   mark_stack_limit, NULL);
+            }
+        }
+    }
 
   if (t->vp)
     mark_stack_ptr = scm_i_vm_mark_stack (t->vp, mark_stack_ptr,


hooks/post-receive
-- 
GNU Guile



reply via email to

[Prev in Thread] Current Thread [Next in Thread]