----------------------------------------------------------- Thread safe allocation in an arena ----------------------------------------------------------- */
| 138 | Thread safe allocation in an arena |
| 139 | ----------------------------------------------------------- */ |
| 140 | static bool mi_arena_alloc(mi_arena_t* arena, size_t blocks, mi_bitmap_index_t* bitmap_idx) |
| 141 | { |
| 142 | size_t idx = 0; // mi_atomic_load_relaxed(&arena->search_idx); // start from last search; ok to be relaxed as the exact start does not matter |
| 143 | if (_mi_bitmap_try_find_from_claim_across(arena->blocks_inuse, arena->field_count, idx, blocks, bitmap_idx)) { |
| 144 | mi_atomic_store_relaxed(&arena->search_idx, mi_bitmap_index_field(*bitmap_idx)); // start search from found location next time around |
| 145 | return true; |
| 146 | }; |
| 147 | return false; |
| 148 | } |
| 149 | |
| 150 | |
| 151 | /* ----------------------------------------------------------- |
no test coverage detected