summaryrefslogtreecommitdiff
path: root/include/mimalloc-internal.h
diff options
context:
space:
mode:
authordaan <daanl@outlook.com>2020-09-06 15:09:51 -0700
committerdaan <daanl@outlook.com>2020-09-06 15:09:51 -0700
commit953bbde089ec4e163dabf508f2f77d34920f600e (patch)
tree514c324098927fa465e6bc03d6f8e198a22fa990 /include/mimalloc-internal.h
parent38261322409d813e8fd7edbc22501bd4790363de (diff)
fix is_in_same_page check
Diffstat (limited to 'include/mimalloc-internal.h')
-rw-r--r--include/mimalloc-internal.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/include/mimalloc-internal.h b/include/mimalloc-internal.h
index 8004ba8..1575c1f 100644
--- a/include/mimalloc-internal.h
+++ b/include/mimalloc-internal.h
@@ -585,7 +585,11 @@ static inline bool mi_is_in_same_segment(const void* p, const void* q) {
static inline bool mi_is_in_same_page(const void* p, const void* q) {
mi_segment_t* segment = _mi_ptr_segment(p);
if (_mi_ptr_segment(q) != segment) return false;
- return (_mi_segment_page_of(segment, p) == _mi_segment_page_of(segment, q));
+ // assume q may be invalid // return (_mi_segment_page_of(segment, p) == _mi_segment_page_of(segment, q));
+ mi_page_t* page = _mi_segment_page_of(segment, p);
+ size_t psize;
+ uint8_t* start = _mi_segment_page_start(segment, page, &psize);
+ return (start <= (uint8_t*)q && (uint8_t*)q < start + psize);
}
static inline uintptr_t mi_rotl(uintptr_t x, uintptr_t shift) {