mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-11 09:49:31 +03:00
fix free bug for meta data
This commit is contained in:
parent
d5c4a16e58
commit
637de624b3
1 changed files with 12 additions and 1 deletions
|
@ -145,7 +145,7 @@ void _mi_meta_free(void* p, size_t size, mi_memid_t memid) {
|
||||||
mi_assert_internal(mi_bitmap_is_clearN(&mpage->blocks_free, block_idx, block_count));
|
mi_assert_internal(mi_bitmap_is_clearN(&mpage->blocks_free, block_idx, block_count));
|
||||||
// we zero on free (and on the initial page allocation) so we don't need a "dirty" map
|
// we zero on free (and on the initial page allocation) so we don't need a "dirty" map
|
||||||
_mi_memzero_aligned(mi_meta_block_start(mpage, block_idx), block_count*MI_META_BLOCK_SIZE);
|
_mi_memzero_aligned(mi_meta_block_start(mpage, block_idx), block_count*MI_META_BLOCK_SIZE);
|
||||||
mi_bitmap_clearN(&mpage->blocks_free, block_idx, block_count);
|
mi_bitmap_setN(&mpage->blocks_free, block_idx, block_count,NULL);
|
||||||
}
|
}
|
||||||
else if (mi_memid_is_os(memid)) {
|
else if (mi_memid_is_os(memid)) {
|
||||||
_mi_os_free(p, size, memid);
|
_mi_os_free(p, size, memid);
|
||||||
|
@ -154,3 +154,14 @@ void _mi_meta_free(void* p, size_t size, mi_memid_t memid) {
|
||||||
mi_assert_internal(mi_memid_needs_no_free(memid));
|
mi_assert_internal(mi_memid_needs_no_free(memid));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool _mi_meta_is_meta_page(void* p)
|
||||||
|
{
|
||||||
|
mi_meta_page_t* mpage0 = mi_atomic_load_ptr_acquire(mi_meta_page_t, &mi_meta_pages);
|
||||||
|
mi_meta_page_t* mpage = mpage0;
|
||||||
|
while (mpage != NULL) {
|
||||||
|
if ((void*)mpage == p) return true;
|
||||||
|
mpage = mi_meta_page_next(mpage);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue