| 204 | */ |
| 205 | |
| 206 | static void mi_page_queue_remove(mi_page_queue_t* queue, mi_page_t* page) { |
| 207 | mi_assert_internal(page != NULL); |
| 208 | mi_assert_expensive(mi_page_queue_contains(queue, page)); |
| 209 | mi_assert_internal(page->xblock_size == queue->block_size || (page->xblock_size > MI_MEDIUM_OBJ_SIZE_MAX && mi_page_queue_is_huge(queue)) || (mi_page_is_in_full(page) && mi_page_queue_is_full(queue))); |
| 210 | mi_heap_t* heap = mi_page_heap(page); |
| 211 | |
| 212 | if (page->prev != NULL) page->prev->next = page->next; |
| 213 | if (page->next != NULL) page->next->prev = page->prev; |
| 214 | if (page == queue->last) queue->last = page->prev; |
| 215 | if (page == queue->first) { |
| 216 | queue->first = page->next; |
| 217 | // update first |
| 218 | mi_assert_internal(mi_heap_contains_queue(heap, queue)); |
| 219 | mi_heap_queue_first_update(heap,queue); |
| 220 | } |
| 221 | heap->page_count--; |
| 222 | page->next = NULL; |
| 223 | page->prev = NULL; |
| 224 | // mi_atomic_store_ptr_release(mi_atomic_cast(void*, &page->heap), NULL); |
| 225 | mi_page_set_in_full(page,false); |
| 226 | } |
| 227 | |
| 228 | |
| 229 | static void mi_page_queue_push(mi_heap_t* heap, mi_page_queue_t* queue, mi_page_t* page) { |
no test coverage detected