[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: crash in gc with upside-down stack
From: |
Linas Vepstas |
Subject: |
Re: crash in gc with upside-down stack |
Date: |
Wed, 12 Nov 2008 23:21:25 -0600 |
Some minor updates:
2008/11/11 Linas Vepstas <address@hidden>:
>
> My stack below.
>
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 0xf5333b90 (LWP 20587)]
> 0xf7711ce3 in scm_mark_locations (x=0xf5333110, n=4294966782) at gc-mark.c:435
> 435 SCM obj = * (SCM *) &x[m];
> Current language: auto; currently c
> (gdb) bt
> #0 0xf7711ce3 in scm_mark_locations (x=0xf5333110, n=4294966782)
> at gc-mark.c:435
> #1 0xf7766a12 in scm_threads_mark_stacks () at threads.c:1375
> #2 0xf7711d38 in scm_mark_all () at gc-mark.c:82
> #3 0xf7710d33 in scm_i_gc (what=0xf778602e "cells") at gc.c:598
My current code reproduces this fairly readily, I am seeing
it many dozens/hundreds of times a day.
I tweaked guile to check that the stack bounds are in order,
and to print an error message when they are, and then to
just troop on -- and so I see dozens/hundreds of prints.
When the stack bounds are reversed, the difference
is *always* 58 bytes; and in fact, the two bad stack
bounds are always the same.
It appears to happen *only* when I have multiple threads
all trying to define functions at the same time, it never
happens when one thread goes off to do some heavy
computing.
--linas