gencgc: Pick out shrunk object tails earlier in conservative root logic.
authorAlastair Bridgewater <nyef@kana.lisphacker.com>
Tue, 31 Dec 2013 20:51:21 +0000 (15:51 -0500)
committerAlastair Bridgewater <nyef@kana.lisphacker.com>
Tue, 31 Dec 2013 20:51:21 +0000 (15:51 -0500)
commit9ec7435fadcd4d40b05845a3ce5e455fb0d63d91
tree2ee673325884afadca005e623f9ad2ff884a1a82
parent0e3c4b4db102bd204a30402d7e5a0de44aea57ce
gencgc: Pick out shrunk object tails earlier in conservative root logic.

  * BIGNUM and VECTOR objects can be allocated overlarge and then
shrunk once the actual required length is known.  This leaves a
"tail" of dead (0 . 0) CONSes.  When this happens in large-object
pages (as opposed to normal pages), we can see that this has
happened and treat any pointer to such objects as not being a
conservative root.

  * Unfortunately, where we currently perform this test we don't
have enough information available to easily say that the reference
is definitely to one of these dead objects, so we use a more
conservative test than strictly required.

  * Add another test for the same situation, but earlier in the
logic, and using a more precise test, so that we can skip a bit of
extra work in such (rare) cases, and so that we can simplify the
overall logic.
src/runtime/gencgc.c