Skip to content

Commit f164354

Browse files
committed
fix bug in freeing huge OS page allocation spanning multiple huge OS pages
1 parent 8909051 commit f164354

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

src/os.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1254,8 +1254,8 @@ void* _mi_os_alloc_huge_os_pages(size_t pages, int numa_node, mi_msecs_t max_mse
12541254
}
12551255
}
12561256
mi_assert_internal(page*MI_HUGE_OS_PAGE_SIZE <= size);
1257-
if (pages_reserved != NULL) *pages_reserved = page;
1258-
if (psize != NULL) *psize = page * MI_HUGE_OS_PAGE_SIZE;
1257+
if (pages_reserved != NULL) { *pages_reserved = page; }
1258+
if (psize != NULL) { *psize = page * MI_HUGE_OS_PAGE_SIZE; }
12591259
return (page == 0 ? NULL : start);
12601260
}
12611261

@@ -1267,6 +1267,7 @@ void _mi_os_free_huge_pages(void* p, size_t size, mi_stats_t* stats) {
12671267
while (size >= MI_HUGE_OS_PAGE_SIZE) {
12681268
_mi_os_free(base, MI_HUGE_OS_PAGE_SIZE, stats);
12691269
size -= MI_HUGE_OS_PAGE_SIZE;
1270+
base += MI_HUGE_OS_PAGE_SIZE;
12701271
}
12711272
}
12721273

test/test-api.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ int main(void) {
163163
for (size_t align = 1; align <= MI_ALIGNMENT_MAX && ok; align *= 2) {
164164
void* ps[8];
165165
for (int i = 0; i < 8 && ok; i++) {
166-
ps[i] = mi_malloc_aligned(align/2 /*size*/, align);
166+
ps[i] = mi_malloc_aligned(align*13 /*size*/, align);
167167
if (ps[i] == NULL || (uintptr_t)(ps[i]) % align != 0) {
168168
ok = false;
169169
}

0 commit comments

Comments
 (0)