[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#13611: SEGV during SMOB GC
From: |
Ludovic Courtès |
Subject: |
bug#13611: SEGV during SMOB GC |
Date: |
Tue, 05 Feb 2013 11:07:51 +0100 |
User-agent: |
Gnus/5.130005 (Ma Gnus v0.5) Emacs/24.2 (gnu/linux) |
Hi Mike,
Mike Gran <address@hidden> skribis:
> This gives
>
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 0xb7d98b40 (LWP 20488)]
> 0xb7f251ab in smob_mark (addr=0x8608ff0, mark_stack_ptr=0xb7d90308,
> mark_stack_limit=0xb7d982f0, env=0) at smob.c:325
> 325 SCM_I_CURRENT_THREAD->current_mark_stack_ptr = mark_stack_ptr;
>
> Here's what's happening internally. When Guile starts up, it creates 3
> threads
> * Initial thread
> * GC thread from scm_storage_prehistory GC_INIT()
> * signal delivery thread
>
> That second thread is the one from which automatic garbage collection
> occurs. The way that thread gets created, it has an
> scm_i_current_thread == NULL, apparently.
Is there any chance that you’re using a GC 7.3 pre-release?
There was a similar report on IRC, and the fix appears to be:
--- a/libguile/smob.c
+++ b/libguile/smob.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995,1996,1998,1999,2000,2001, 2003, 2004, 2006, 2009, 2010,
2011, 2012 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1998,1999,2000,2001, 2003, 2004, 2006, 2009, 2010,
2011, 2012, 2013 Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
@@ -318,7 +318,7 @@ smob_mark (GC_word *addr, struct GC_ms_entry
*mark_stack_ptr,
mark_stack_ptr,
mark_stack_limit, NULL);
- if (scm_smobs[smobnum].mark)
+ if (scm_smobs[smobnum].mark && SCM_I_CURRENT_THREAD != NULL)
{
SCM obj;
(Note that on 2.0 SMOB mark procedures are unnecessary.)
Ludo’.