Jan Vroonhof <vroonhof(a)math.ethz.ch> writes:
x-remap-keysyms-using-function-key-map which is uninterned. The
constants vector is the only reference. However this vector is in
pure space and thus is not swept on GC. Therefore there is no link
to the symbol and thus its gets GC.
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.
As far as I can tell from scanning the code, it's correct:
DEFUN ("make-byte-code", Fmake_byte_code, 4, MANY, 0,
[...]
if (purify_flag)
{
[...]
/* Statistics are kept differently for the constants */
if (!purified (f->constants))
{
f->constants = Fpurecopy (f->constants);
}
This Fpurecopy() should intern the symbols to Vpure_uninterned_symbol_table.
I am not sure this what Martin actually fixed.
You mean Kyle?
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.