Hrvoje Niksic <hniksic(a)srce.hr> writes:
If the vector is in pure space, then all its symbol contents should
be
interned in Vpure_uninterned_symbol_table until the end of time, and
GCPRO'ed through that. If that doesn't happen, it's a bug in the
whatever code produces the pure compiled function.
No. In the code you quoted from Fpurecopy symbol is only put in
Vpure_uninterned_symbol_table when it is uninterned _at the time
of the purecopy_. Probably in this case it is interned at that time
(although I do not know how).
I agree the code you cited from bytecode.c looks correct. I also read
through it when hunting fro this bug.
> I am not sure this what Martin actually fixed.
You mean Kyle?
I was replying to a message from Gunnar in the bug tracking archive where
he asks the bug reporter to try it with 21.2 because Martin had
touched the relevant code.
> However, this is incomplete. What happens if I unintern it later
(as
> x-win-init-sun does)?
If you unintern it later, it doesn't matter, because you still have a
living reference in Vpure_uninterned_symbol_table, which should keep
the GC sweeper from putting its greasy hands on the symbol.
No. That reference exists only if it was uninterned before.
I still think that is the best explanation for the crash, giving the symptoms.
Jan