[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Abort caused by unknown type in GC
From: |
Michael Livshin |
Subject: |
Re: Abort caused by unknown type in GC |
Date: |
25 Aug 2001 02:47:17 +0300 |
User-agent: |
Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.4 (Copyleft) |
Neil Jerram <address@hidden> writes:
> >>>>> "Neil" == Neil Jerram <address@hidden> writes:
>
> Neil> Error in scm_gc_sweep during GC: unknown type Aborted
>
> I've now reduced this problem to two lines...
>
> address@hidden ~]$ guile -q
> guile> (symbol-fset! 'equal (make-variable equal?))
> guile> (gc)
> Error in scm_gc_sweep during GC: unknown type
> Aborted
>
> This is with development CVS. I haven't checked yet whether it is
> also a problem for stable CVS.
not a problem in stable.
there are several problems, actually.
* problem #1 is a simple bug: Guile "forgot" how to sweep unreachable
variables. that's because they used to be smobs, but aren't
anymore, so there should be a separate case for them in
scm_gc_sweep.
* problem #2 is that the symbol 'equal in your example is not held on
to, even though it gets a function bound to it. I'm not sure this
is right, but I'm not sure how (and whether) to fix it.
* problem #3 is that `symbol-fset!' doesn't check its second argument
for being an applicable object. not relevant to your example,
actually. I'm not sure it's worth fixing since I'm not sure
whether `symbol-fset!' is going to be kept...
#1's fixed.
thanks for great analysis,
--mike
--
Look, would it save you all this bother if I just gave up and went mad now?
-- Arthur Dent