guile-user
[Top][All Lists]
Advanced

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

guile-dbi cores in mark_db_handle


From: Andrew Gaylard
Subject: guile-dbi cores in mark_db_handle
Date: Fri, 30 Aug 2013 09:21:11 +0200
User-agent: Mozilla/5.0 (X11; SunOS sun4u; rv:17.0) Gecko/20130802 Thunderbird/17.0.8

Hi guile people,

I'm experiencing cores in guile-dbi.

This is on Solaris-10u10 on SPARC, with guile and guile-dbi compiled with -O2.
When compiled with -O0, the problem disappears.  I've also been unable to
replicate the problem on Linux x86_64. This suggests to me that the
underlying cause could be timing-related (my guile app does use threads).

This is what gdb shows:

Program terminated with signal 10, Bus error.
#0 0xffffffff75601c8c in mark_db_handle (g_db_handle_smob=0x10115efc0) at guile-dbi.c:114
114       scm_gc_mark(g_db_handle->bcknd);
(gdb) p g_db_handle
$1 = (gdbi_db_handle_t *) 0x304

That 0x304 is SCM_EOL. The only part of guile-dbi.c which looks like it could be
causing this is free_db_handle, which does this:

SCM_SETCDR (g_db_handle_smob, SCM_EOL);

If this is the cause, then why is mark_db_handle being called after the object
has already been free'd?

I can prevent the cores by adding this to the start of mark_db_handle:

if (g_db_handle == (gdbi_db_handle_t*) SCM_EOL) return SCM_UNSPECIFIED;

However, I'm concerned that this isn't the right fix; what if something really does need
to be marked, and isn't?  -- it'll be GC'd when it shouldn't, right?

--
Andrew




reply via email to

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