Kim Barrett's comment:
_alt_hash is not subject to concurrent modification, which is a good
thing because there is lots of code that is not set up to cope with
that possibility. It is only set by rehash_table, which is only
called from safepoint cleanup.
Hm, but looking at that makes me nervous. We're running various
cleanup tasks in parallel. What happens if one of the other parallel
tasks needs to look up a symbol? That seems like it would lead to bad
things if it can happen. And it's not entirely obvious to me that it
can't happen. Similarly for stringtable.
Given the way it's used, it seems like it should be a StringTable
ordinary member rather than a static member, and the new table
produced by rehashing (that wants it turned on) should be constructed
with it being true.