mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-04 22:49:32 +03:00
fix assertions for the new huge page cache
This commit is contained in:
parent
cd7aa0ce83
commit
443fa0fbb5
1 changed files with 12 additions and 12 deletions
|
@ -172,7 +172,7 @@ static size_t mi_segment_size(size_t capacity, size_t required, size_t* pre_size
|
|||
;
|
||||
if (info_size != NULL) *info_size = isize;
|
||||
if (pre_size != NULL) *pre_size = isize + guardsize;
|
||||
return (required==0 ? MI_SEGMENT_SIZE : required + isize + 2*guardsize);
|
||||
return (required==0 ? MI_SEGMENT_SIZE : _mi_align_up( required + isize + 2*guardsize, MI_PAGE_HUGE_ALIGN) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -214,7 +214,7 @@ static mi_segment_t* _mi_segment_cache_findx(mi_segments_tld_t* tld, size_t requ
|
|||
tld->cache_size -= segment->segment_size;
|
||||
mi_segment_queue_remove(&tld->cache, segment);
|
||||
// exact size match?
|
||||
if (segment->segment_size == required) {
|
||||
if (required==0 || segment->segment_size == required) {
|
||||
return segment;
|
||||
}
|
||||
// not more than 25% waste and on a huge page segment? (in that case the segment size does not need to match required)
|
||||
|
@ -329,7 +329,7 @@ static mi_segment_t* mi_segment_alloc( size_t required, mi_page_kind_t page_kind
|
|||
segment = mi_segment_cache_find(tld,segment_size);
|
||||
mi_assert_internal(segment == NULL ||
|
||||
(segment_size==MI_SEGMENT_SIZE && segment_size == segment->segment_size) ||
|
||||
(segment_size!=MI_SEGMENT_SIZE && segment_size >= segment->segment_size));
|
||||
(segment_size!=MI_SEGMENT_SIZE && segment_size <= segment->segment_size));
|
||||
if (segment != NULL && mi_option_is_enabled(mi_option_secure) && (segment->page_kind != page_kind || segment->segment_size != segment_size)) {
|
||||
_mi_os_unprotect(segment,segment->segment_size);
|
||||
}
|
||||
|
@ -666,7 +666,7 @@ static mi_page_t* mi_segment_large_page_alloc(mi_segments_tld_t* tld, mi_os_tld_
|
|||
|
||||
static mi_page_t* mi_segment_huge_page_alloc(size_t size, mi_segments_tld_t* tld, mi_os_tld_t* os_tld)
|
||||
{
|
||||
mi_segment_t* segment = mi_segment_alloc(_mi_align_up(size, MI_PAGE_HUGE_ALIGN), MI_PAGE_HUGE, MI_SEGMENT_SHIFT,tld,os_tld);
|
||||
mi_segment_t* segment = mi_segment_alloc(size, MI_PAGE_HUGE, MI_SEGMENT_SHIFT,tld,os_tld);
|
||||
if (segment == NULL) return NULL;
|
||||
mi_assert_internal(segment->segment_size - segment->segment_info_size >= size);
|
||||
segment->used = 1;
|
||||
|
|
Loading…
Add table
Reference in a new issue