called from segments when reclaiming abandoned pages
| 244 | |
| 245 | // called from segments when reclaiming abandoned pages |
| 246 | void _mi_page_reclaim(mi_heap_t* heap, mi_page_t* page) { |
| 247 | mi_assert_expensive(mi_page_is_valid_init(page)); |
| 248 | |
| 249 | mi_assert_internal(mi_page_heap(page) == heap); |
| 250 | mi_assert_internal(mi_page_thread_free_flag(page) != MI_NEVER_DELAYED_FREE); |
| 251 | #if MI_HUGE_PAGE_ABANDON |
| 252 | mi_assert_internal(_mi_page_segment(page)->kind != MI_SEGMENT_HUGE); |
| 253 | #endif |
| 254 | mi_assert_internal(!page->is_reset); |
| 255 | // TODO: push on full queue immediately if it is full? |
| 256 | mi_page_queue_t* pq = mi_page_queue(heap, mi_page_block_size(page)); |
| 257 | mi_page_queue_push(heap, pq, page); |
| 258 | mi_assert_expensive(_mi_page_is_valid(page)); |
| 259 | } |
| 260 | |
| 261 | // allocate a fresh page from a segment |
| 262 | static mi_page_t* mi_page_fresh_alloc(mi_heap_t* heap, mi_page_queue_t* pq, size_t block_size, size_t page_alignment) { |
no test coverage detected