mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-04 22:49:32 +03:00
enable atomic yield when delayed_freeing is encountered
This commit is contained in:
parent
0193a15f7e
commit
3bbbe6c686
2 changed files with 2 additions and 2 deletions
|
@ -147,7 +147,7 @@ static void mi_heap_collect_ex(mi_heap_t* heap, mi_collect_t collect)
|
||||||
|
|
||||||
// collect all pages owned by this thread
|
// collect all pages owned by this thread
|
||||||
mi_heap_visit_pages(heap, &mi_heap_page_collect, &collect, NULL);
|
mi_heap_visit_pages(heap, &mi_heap_page_collect, &collect, NULL);
|
||||||
mi_assert_internal( collect != ABANDON || heap->thread_delayed_free == NULL );
|
mi_assert_internal( collect != ABANDON || mi_atomic_read_ptr(mi_block_t,&heap->thread_delayed_free) == NULL );
|
||||||
|
|
||||||
// collect segment caches
|
// collect segment caches
|
||||||
if (collect >= FORCE) {
|
if (collect >= FORCE) {
|
||||||
|
|
|
@ -130,7 +130,7 @@ void _mi_page_use_delayed_free(mi_page_t* page, mi_delayed_t delay, bool overrid
|
||||||
tfreex = mi_tf_set_delayed(tfree, delay);
|
tfreex = mi_tf_set_delayed(tfree, delay);
|
||||||
old_delay = mi_tf_delayed(tfree);
|
old_delay = mi_tf_delayed(tfree);
|
||||||
if (mi_unlikely(old_delay == MI_DELAYED_FREEING)) {
|
if (mi_unlikely(old_delay == MI_DELAYED_FREEING)) {
|
||||||
// mi_atomic_yield(); // delay until outstanding MI_DELAYED_FREEING are done.
|
mi_atomic_yield(); // delay until outstanding MI_DELAYED_FREEING are done.
|
||||||
tfree = mi_tf_set_delayed(tfree, MI_NO_DELAYED_FREE); // will cause CAS to busy fail
|
tfree = mi_tf_set_delayed(tfree, MI_NO_DELAYED_FREE); // will cause CAS to busy fail
|
||||||
}
|
}
|
||||||
else if (delay == old_delay) {
|
else if (delay == old_delay) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue