mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-08-24 00:04:48 +03:00
check commit success for pagemap extension so NULL can be returned instead of faulting (issue #1098)
This commit is contained in:
parent
ac4e3fd177
commit
a18b692262
4 changed files with 92 additions and 50 deletions
|
@ -193,7 +193,7 @@ bool _mi_meta_is_meta_page(void* p);
|
|||
|
||||
// "page-map.c"
|
||||
bool _mi_page_map_init(void);
|
||||
void _mi_page_map_register(mi_page_t* page);
|
||||
mi_decl_nodiscard bool _mi_page_map_register(mi_page_t* page);
|
||||
void _mi_page_map_unregister(mi_page_t* page);
|
||||
void _mi_page_map_unregister_range(void* start, size_t size);
|
||||
mi_page_t* _mi_safe_ptr_page(const void* p);
|
||||
|
@ -557,7 +557,9 @@ static inline mi_page_t* _mi_unchecked_ptr_page(const void* p) {
|
|||
#define MI_PAGE_MAP_SHIFT (MI_MAX_VABITS - MI_PAGE_MAP_SUB_SHIFT - MI_ARENA_SLICE_SHIFT)
|
||||
#define MI_PAGE_MAP_COUNT (MI_ZU(1) << MI_PAGE_MAP_SHIFT)
|
||||
|
||||
extern mi_decl_hidden mi_page_t*** _mi_page_map;
|
||||
typedef mi_page_t** mi_submap_t;
|
||||
|
||||
extern mi_decl_hidden mi_submap_t* _mi_page_map;
|
||||
|
||||
static inline size_t _mi_page_map_index(const void* p, size_t* sub_idx) {
|
||||
const size_t u = (size_t)((uintptr_t)p / MI_ARENA_SLICE_SIZE);
|
||||
|
@ -574,7 +576,7 @@ static inline mi_page_t* _mi_unchecked_ptr_page(const void* p) {
|
|||
static inline mi_page_t* _mi_checked_ptr_page(const void* p) {
|
||||
size_t sub_idx;
|
||||
const size_t idx = _mi_page_map_index(p, &sub_idx);
|
||||
mi_page_t** const sub = _mi_page_map[idx];
|
||||
mi_submap_t const sub = _mi_page_map[idx];
|
||||
if mi_unlikely(sub == NULL) return (mi_page_t*)&_mi_page_empty;
|
||||
return sub[sub_idx];
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue