File tree 3 files changed +10
-3
lines changed
3 files changed +10
-3
lines changed Original file line number Diff line number Diff line change @@ -117,7 +117,8 @@ void _mi_heap_delayed_free_all(mi_heap_t* heap);
117
117
bool _mi_heap_delayed_free_partial (mi_heap_t * heap);
118
118
void _mi_heap_collect_retired (mi_heap_t * heap, bool force);
119
119
120
- bool _mi_page_use_delayed_free (mi_page_t * page, mi_delayed_t delay, bool override_never);
120
+ void _mi_page_use_delayed_free (mi_page_t * page, mi_delayed_t delay, bool override_never);
121
+ bool _mi_page_try_use_delayed_free (mi_page_t * page, mi_delayed_t delay, bool override_never);
121
122
size_t _mi_page_queue_append (mi_heap_t * heap, mi_page_queue_t * pq, mi_page_queue_t * append);
122
123
void _mi_deferred_free (mi_heap_t * heap, bool force);
123
124
Original file line number Diff line number Diff line change @@ -531,7 +531,7 @@ bool _mi_free_delayed_block(mi_block_t* block) {
531
531
// some blocks may end up in the page `thread_free` list with no blocks in the
532
532
// heap `thread_delayed_free` list which may cause the page to be never freed!
533
533
// (it would only be freed if we happen to scan it in `mi_page_queue_find_free_ex`)
534
- if (!_mi_page_use_delayed_free (page , MI_USE_DELAYED_FREE , false /* dont overwrite never delayed */ )) {
534
+ if (!_mi_page_try_use_delayed_free (page , MI_USE_DELAYED_FREE , false /* dont overwrite never delayed */ )) {
535
535
return false;
536
536
}
537
537
Original file line number Diff line number Diff line change @@ -122,7 +122,13 @@ bool _mi_page_is_valid(mi_page_t* page) {
122
122
}
123
123
#endif
124
124
125
- bool _mi_page_use_delayed_free (mi_page_t * page , mi_delayed_t delay , bool override_never ) {
125
+ void _mi_page_use_delayed_free (mi_page_t * page , mi_delayed_t delay , bool override_never ) {
126
+ while (!_mi_page_try_use_delayed_free (page , delay , override_never )) {
127
+ mi_atomic_yield ();
128
+ }
129
+ }
130
+
131
+ bool _mi_page_try_use_delayed_free (mi_page_t * page , mi_delayed_t delay , bool override_never ) {
126
132
mi_thread_free_t tfreex ;
127
133
mi_delayed_t old_delay ;
128
134
mi_thread_free_t tfree ;
You can’t perform that action at this time.
0 commit comments