bool pin() { // Can't pin young objects! if(young_object_p()) return false; flags().Pinned = 1; return true; }
bool ObjectHeader::pin() { // Can't pin young objects! if(young_object_p()) return false; for(;;) { HeaderWord orig = header; HeaderWord new_val = orig; new_val.f.Pinned = 1; if(header.atomic_set(orig, new_val)) return true; } return true; }
bool ObjectHeader::pin() { // Can't pin young objects! if(young_object_p()) return false; for(;;) { if(inflated_header_p()) { return inflated_header()->pin(); } else { HeaderWord orig = header; orig.f.inflated = 0; HeaderWord new_val = orig; new_val.f.Pinned = 1; if(header.atomic_set(orig, new_val)) return true; } } return true; }