X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fgencgc.c;fp=src%2Fruntime%2Fgencgc.c;h=77ec79795b17d62ac356c6b40f9b6818f0a02fe7;hb=0cd4731bb43b3f79d33e85300407031f808763f0;hp=5d218b1b59383e807eec401fbb2bad5ff8d16417;hpb=ba008a77f32b2ef30e8492757afb8b54731c76cf;p=sbcl.git diff --git a/src/runtime/gencgc.c b/src/runtime/gencgc.c index 5d218b1..77ec797 100644 --- a/src/runtime/gencgc.c +++ b/src/runtime/gencgc.c @@ -201,7 +201,18 @@ static inline boolean page_boxed_p(page_index_t page) { } static inline boolean code_page_p(page_index_t page) { - return (page_table[page].allocated & CODE_PAGE_FLAG); + /* This is used by the conservative pinning logic to determine if + * a page can contain code objects. Ideally, we'd be able to + * check the page allocation flag to see if it is CODE_PAGE_FLAG, + * but this turns out not to be reliable (in fact, badly + * unreliable) at the moment. On the upside, all code objects are + * boxed objects, so we can simply re-use the boxed_page_p() logic + * for a tighter result than merely "is this page allocated". */ +#if 0 + return (page_table[page].allocated & CODE_PAGE_FLAG) == CODE_PAGE_FLAG; +#else + return page_boxed_p(page); +#endif } static inline boolean page_boxed_no_region_p(page_index_t page) {