| 1247 | } |
| 1248 | |
| 1249 | void _mi_segment_page_abandon(mi_page_t* page, mi_segments_tld_t* tld) { |
| 1250 | mi_assert(page != NULL); |
| 1251 | mi_assert_internal(mi_page_thread_free_flag(page)==MI_NEVER_DELAYED_FREE); |
| 1252 | mi_assert_internal(mi_page_heap(page) == NULL); |
| 1253 | mi_segment_t* segment = _mi_page_segment(page); |
| 1254 | |
| 1255 | mi_assert_expensive(mi_segment_is_valid(segment,tld)); |
| 1256 | segment->abandoned++; |
| 1257 | |
| 1258 | _mi_stat_increase(&tld->stats->pages_abandoned, 1); |
| 1259 | mi_assert_internal(segment->abandoned <= segment->used); |
| 1260 | if (segment->used == segment->abandoned) { |
| 1261 | // all pages are abandoned, abandon the entire segment |
| 1262 | mi_segment_abandon(segment, tld); |
| 1263 | } |
| 1264 | } |
| 1265 | |
| 1266 | /* ----------------------------------------------------------- |
| 1267 | Reclaim abandoned pages |
no test coverage detected