Push on the visited list
| 1096 | |
| 1097 | // Push on the visited list |
| 1098 | static void mi_abandoned_visited_push(mi_segment_t* segment) { |
| 1099 | mi_assert_internal(segment->thread_id == 0); |
| 1100 | mi_assert_internal(mi_atomic_load_ptr_relaxed(mi_segment_t,&segment->abandoned_next) == NULL); |
| 1101 | mi_assert_internal(segment->next == NULL); |
| 1102 | mi_assert_internal(segment->used > 0); |
| 1103 | mi_segment_t* anext = mi_atomic_load_ptr_relaxed(mi_segment_t, &abandoned_visited); |
| 1104 | do { |
| 1105 | mi_atomic_store_ptr_release(mi_segment_t, &segment->abandoned_next, anext); |
| 1106 | } while (!mi_atomic_cas_ptr_weak_release(mi_segment_t, &abandoned_visited, &anext, segment)); |
| 1107 | mi_atomic_increment_relaxed(&abandoned_visited_count); |
| 1108 | } |
| 1109 | |
| 1110 | // Move the visited list to the abandoned list. |
| 1111 | static bool mi_abandoned_visited_revisit(void) |
no outgoing calls
no test coverage detected