fix abondoned segment counter, and free list adding
This commit is contained in:
parent
5b6f4ecc12
commit
ef4359b272
@ -584,7 +584,7 @@ static void mi_segment_abandon(mi_segment_t* segment, mi_segments_tld_t* tld) {
|
||||
} while (!mi_atomic_compare_exchange_ptr((volatile void**)&abandoned, segment, segment->abandoned_next));
|
||||
mi_atomic_increment(&abandoned_count);
|
||||
_mi_stat_increase(&tld->stats->segments_abandoned,1);
|
||||
mi_segments_track_size((long)segment->segment_size, tld);
|
||||
mi_segments_track_size(-((long)segment->segment_size), tld);
|
||||
}
|
||||
|
||||
void _mi_segment_page_abandon(mi_page_t* page, mi_segments_tld_t* tld) {
|
||||
@ -628,10 +628,7 @@ bool _mi_segment_try_reclaim_abandoned( mi_heap_t* heap, bool try_all, mi_segmen
|
||||
mi_assert_internal(segment->next == NULL && segment->prev == NULL);
|
||||
mi_assert_expensive(mi_segment_is_valid(segment));
|
||||
_mi_stat_decrease(&tld->stats->segments_abandoned,1);
|
||||
// add its free pages to the the current thread
|
||||
if (segment->page_kind == MI_PAGE_SMALL && mi_segment_has_free(segment)) {
|
||||
mi_segment_enqueue(&tld->small_free, segment);
|
||||
}
|
||||
|
||||
// add its abandoned pages to the current thread
|
||||
mi_assert(segment->abandoned == segment->used);
|
||||
for (size_t i = 0; i < segment->capacity; i++) {
|
||||
@ -656,6 +653,10 @@ bool _mi_segment_try_reclaim_abandoned( mi_heap_t* heap, bool try_all, mi_segmen
|
||||
}
|
||||
else {
|
||||
reclaimed++;
|
||||
// add its free pages to the the current thread free small segment queue
|
||||
if (segment->page_kind == MI_PAGE_SMALL && mi_segment_has_free(segment)) {
|
||||
mi_segment_enqueue(&tld->small_free, segment);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (reclaimed>0);
|
||||
|
Loading…
Reference in New Issue
Block a user