• Home
  • Raw
  • Download

Lines Matching full:page

9   Definition of page queues for each block size
13 #error "this file should be included from 'page.c'"
120 static bool mi_page_queue_contains(mi_page_queue_t* queue, const mi_page_t* page) { in mi_page_queue_contains() argument
121 mi_assert_internal(page != NULL); in mi_page_queue_contains()
126 if (list == page) break; in mi_page_queue_contains()
129 return (list == page); in mi_page_queue_contains()
140 static mi_page_queue_t* mi_page_queue_of(const mi_page_t* page) { in mi_page_queue_of() argument
141 uint8_t bin = (mi_page_is_in_full(page) ? MI_BIN_FULL : mi_bin(page->xblock_size)); in mi_page_queue_of()
142 mi_heap_t* heap = mi_page_heap(page); in mi_page_queue_of()
145 mi_assert_internal(bin >= MI_BIN_HUGE || page->xblock_size == pq->block_size); in mi_page_queue_of()
146 mi_assert_expensive(mi_page_queue_contains(pq, page)); in mi_page_queue_of()
150 static mi_page_queue_t* mi_heap_page_queue_of(mi_heap_t* heap, const mi_page_t* page) { in mi_heap_page_queue_of() argument
151 uint8_t bin = (mi_page_is_in_full(page) ? MI_BIN_FULL : mi_bin(page->xblock_size)); in mi_heap_page_queue_of()
154 mi_assert_internal(mi_page_is_in_full(page) || page->xblock_size == pq->block_size); in mi_heap_page_queue_of()
158 // The current small page array is for efficiency and for each
159 // small size (up to 256) it points directly to the page for that
161 // current free page queue is updated for a small bin, we need to update a
168 mi_page_t* page = pq->first; in mi_heap_queue_first_update() local
169 if (pq->first == NULL) page = (mi_page_t*)&_mi_page_empty; in mi_heap_queue_first_update()
171 // find index in the right direct page array in mi_heap_queue_first_update()
176 if (pages_free[idx] == page) return; // already set in mi_heap_queue_first_update()
193 // set size range to the right page in mi_heap_queue_first_update()
196 pages_free[sz] = page; in mi_heap_queue_first_update()
206 static void mi_page_queue_remove(mi_page_queue_t* queue, mi_page_t* page) { in mi_page_queue_remove() argument
207 mi_assert_internal(page != NULL); in mi_page_queue_remove()
208 mi_assert_expensive(mi_page_queue_contains(queue, page)); in mi_page_queue_remove()
209 …al(page->xblock_size == queue->block_size || (page->xblock_size > MI_MEDIUM_OBJ_SIZE_MAX && mi_pag… in mi_page_queue_remove()
210 mi_heap_t* heap = mi_page_heap(page); in mi_page_queue_remove()
212 if (page->prev != NULL) page->prev->next = page->next; in mi_page_queue_remove()
213 if (page->next != NULL) page->next->prev = page->prev; in mi_page_queue_remove()
214 if (page == queue->last) queue->last = page->prev; in mi_page_queue_remove()
215 if (page == queue->first) { in mi_page_queue_remove()
216 queue->first = page->next; in mi_page_queue_remove()
222 page->next = NULL; in mi_page_queue_remove()
223 page->prev = NULL; in mi_page_queue_remove()
224 // mi_atomic_store_ptr_release(mi_atomic_cast(void*, &page->heap), NULL); in mi_page_queue_remove()
225 mi_page_set_in_full(page,false); in mi_page_queue_remove()
229 static void mi_page_queue_push(mi_heap_t* heap, mi_page_queue_t* queue, mi_page_t* page) { in mi_page_queue_push() argument
230 mi_assert_internal(mi_page_heap(page) == heap); in mi_page_queue_push()
231 mi_assert_internal(!mi_page_queue_contains(queue, page)); in mi_page_queue_push()
233 mi_assert_internal(_mi_page_segment(page)->kind != MI_SEGMENT_HUGE); in mi_page_queue_push()
235 mi_assert_internal(page->xblock_size == queue->block_size || in mi_page_queue_push()
236 (page->xblock_size > MI_MEDIUM_OBJ_SIZE_MAX) || in mi_page_queue_push()
237 (mi_page_is_in_full(page) && mi_page_queue_is_full(queue))); in mi_page_queue_push()
239 mi_page_set_in_full(page, mi_page_queue_is_full(queue)); in mi_page_queue_push()
240 // mi_atomic_store_ptr_release(mi_atomic_cast(void*, &page->heap), heap); in mi_page_queue_push()
241 page->next = queue->first; in mi_page_queue_push()
242 page->prev = NULL; in mi_page_queue_push()
245 queue->first->prev = page; in mi_page_queue_push()
246 queue->first = page; in mi_page_queue_push()
249 queue->first = queue->last = page; in mi_page_queue_push()
258 static void mi_page_queue_enqueue_from(mi_page_queue_t* to, mi_page_queue_t* from, mi_page_t* page)… in mi_page_queue_enqueue_from() argument
259 mi_assert_internal(page != NULL); in mi_page_queue_enqueue_from()
260 mi_assert_expensive(mi_page_queue_contains(from, page)); in mi_page_queue_enqueue_from()
261 mi_assert_expensive(!mi_page_queue_contains(to, page)); in mi_page_queue_enqueue_from()
263 …mi_assert_internal((page->xblock_size == to->block_size && page->xblock_size == from->block_size) … in mi_page_queue_enqueue_from()
264 (page->xblock_size == to->block_size && mi_page_queue_is_full(from)) || in mi_page_queue_enqueue_from()
265 (page->xblock_size == from->block_size && mi_page_queue_is_full(to)) || in mi_page_queue_enqueue_from()
266 (page->xblock_size > MI_LARGE_OBJ_SIZE_MAX && mi_page_queue_is_huge(to)) || in mi_page_queue_enqueue_from()
267 (page->xblock_size > MI_LARGE_OBJ_SIZE_MAX && mi_page_queue_is_full(to))); in mi_page_queue_enqueue_from()
269 mi_heap_t* heap = mi_page_heap(page); in mi_page_queue_enqueue_from()
270 if (page->prev != NULL) page->prev->next = page->next; in mi_page_queue_enqueue_from()
271 if (page->next != NULL) page->next->prev = page->prev; in mi_page_queue_enqueue_from()
272 if (page == from->last) from->last = page->prev; in mi_page_queue_enqueue_from()
273 if (page == from->first) { in mi_page_queue_enqueue_from()
274 from->first = page->next; in mi_page_queue_enqueue_from()
280 page->prev = to->last; in mi_page_queue_enqueue_from()
281 page->next = NULL; in mi_page_queue_enqueue_from()
284 to->last->next = page; in mi_page_queue_enqueue_from()
285 to->last = page; in mi_page_queue_enqueue_from()
288 to->first = page; in mi_page_queue_enqueue_from()
289 to->last = page; in mi_page_queue_enqueue_from()
293 mi_page_set_in_full(page, mi_page_queue_is_full(to)); in mi_page_queue_enqueue_from()
305 for (mi_page_t* page = append->first; page != NULL; page = page->next) { in _mi_page_queue_append() local
308 mi_atomic_store_release(&page->xheap, (uintptr_t)heap); in _mi_page_queue_append()
312 _mi_page_use_delayed_free(page, MI_USE_DELAYED_FREE, false); in _mi_page_queue_append()