Subject: Re: bug#17168: 24.3.50; Segfault at mark_object

From: Daniel Colascione <[email-masked]>
Date: Sun, 06 Apr 2014 08:46:59 -0700

On 04/06/2014 05:36 AM, Stefan Monnier wrote:
>> This scheme works and passes Dmitry's test, but the resulting
>> Vpure_reachable vector has over 8,000 items. Most of these items are
>> ordinary interned symbols.
> 
> What objects are there besides symbols in Vpure_reachable?

Just symbols for me.

> If we can reduce Vpure_reachable to only contain symbols, then we can
> replace it with a `pinned' bit in the Lisp_Symbol struct and then walk
> the list of symbols during mark, marking all those symbols with the
> `pinned' bit.

The pinned bit approach is exactly what I implemented, except that we
walk obarray, like we already do, instead of all symbols. Your approach
would require that we check for non-symbols in purecopy and reject them,
and it'd have a bigger performance impact, since we'd then need to walk
the entire symbol list essentially twice.

I'd strongly prefer the fully general approach in my patch. It isn't
*that* complicated.