Fix bad-free in psync_interval_tree_free

Interval tree nodes are allocated via pmem_malloc, which prepends a
16-byte header. Passing bare free() to ptree_for_each_element_call_safe
freed the wrong address. Add free_interval_tree_node() helper that uses
pmem_free and use it in psync_interval_tree_free.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Levi Neely 2026-03-10 13:34:09 +01:00
parent a48be6dbc3
commit 8916acb4f6
1 changed files with 5 additions and 1 deletions

View File

@ -143,9 +143,13 @@ void psync_interval_tree_remove(psync_interval_tree_t **tree, uint64_t from,
}
}
static void free_interval_tree_node(psync_interval_tree_t *e) {
pmem_free(PMEM_SUBSYS_OTHER, e);
}
void psync_interval_tree_free(psync_interval_tree_t *tree) {
if (tree)
ptree_for_each_element_call_safe(&tree->tree, psync_interval_tree_t, tree, free);
ptree_for_each_element_call_safe(&tree->tree, psync_interval_tree_t, tree, free_interval_tree_node);
}
static psync_interval_tree_t *