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.