add argument pointer to the register deferred free callback
This commit is contained in:
parent
f92a2a7264
commit
0956a05bf6
@ -108,8 +108,8 @@ mi_decl_export mi_decl_allocator void* mi_reallocf(void* p, size_t newsize)
|
|||||||
mi_decl_export size_t mi_usable_size(const void* p) mi_attr_noexcept;
|
mi_decl_export size_t mi_usable_size(const void* p) mi_attr_noexcept;
|
||||||
mi_decl_export size_t mi_good_size(size_t size) mi_attr_noexcept;
|
mi_decl_export size_t mi_good_size(size_t size) mi_attr_noexcept;
|
||||||
|
|
||||||
typedef void (mi_deferred_free_fun)(bool force, unsigned long long heartbeat);
|
typedef void (mi_deferred_free_fun)(bool force, unsigned long long heartbeat, void* arg);
|
||||||
mi_decl_export void mi_register_deferred_free(mi_deferred_free_fun* deferred_free) mi_attr_noexcept;
|
mi_decl_export void mi_register_deferred_free(mi_deferred_free_fun* deferred_free, void* arg) mi_attr_noexcept;
|
||||||
|
|
||||||
typedef void (mi_output_fun)(const char* msg, void* arg);
|
typedef void (mi_output_fun)(const char* msg, void* arg);
|
||||||
mi_decl_export void mi_register_output(mi_output_fun* out, void* arg) mi_attr_noexcept;
|
mi_decl_export void mi_register_output(mi_output_fun* out, void* arg) mi_attr_noexcept;
|
||||||
|
@ -764,18 +764,20 @@ static inline mi_page_t* mi_find_free_page(mi_heap_t* heap, size_t size) {
|
|||||||
----------------------------------------------------------- */
|
----------------------------------------------------------- */
|
||||||
|
|
||||||
static mi_deferred_free_fun* volatile deferred_free = NULL;
|
static mi_deferred_free_fun* volatile deferred_free = NULL;
|
||||||
|
static volatile _Atomic(void*) deferred_arg; // = NULL
|
||||||
|
|
||||||
void _mi_deferred_free(mi_heap_t* heap, bool force) {
|
void _mi_deferred_free(mi_heap_t* heap, bool force) {
|
||||||
heap->tld->heartbeat++;
|
heap->tld->heartbeat++;
|
||||||
if (deferred_free != NULL && !heap->tld->recurse) {
|
if (deferred_free != NULL && !heap->tld->recurse) {
|
||||||
heap->tld->recurse = true;
|
heap->tld->recurse = true;
|
||||||
deferred_free(force, heap->tld->heartbeat);
|
deferred_free(force, heap->tld->heartbeat, mi_atomic_read_ptr_relaxed(&deferred_arg));
|
||||||
heap->tld->recurse = false;
|
heap->tld->recurse = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void mi_register_deferred_free(mi_deferred_free_fun* fn) mi_attr_noexcept {
|
void mi_register_deferred_free(mi_deferred_free_fun* fn, void* arg) mi_attr_noexcept {
|
||||||
deferred_free = fn;
|
deferred_free = fn;
|
||||||
|
mi_atomic_write_ptr(&deferred_arg, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user