MCPcopy Create free account
hub / github.com/CppCXY/EmmyLuaCodeStyle / mi_abandoned_push

Function mi_abandoned_push

3rd/mimalloc-2.0.9/src/segment.c:1155–1167  ·  view source on GitHub ↗

Push on the abandoned list.

Source from the content-addressed store, hash-verified

1153
1154// Push on the abandoned list.
1155static void mi_abandoned_push(mi_segment_t* segment) {
1156 mi_assert_internal(segment->thread_id == 0);
1157 mi_assert_internal(mi_atomic_load_ptr_relaxed(mi_segment_t, &segment->abandoned_next) == NULL);
1158 mi_assert_internal(segment->next == NULL);
1159 mi_assert_internal(segment->used > 0);
1160 mi_tagged_segment_t next;
1161 mi_tagged_segment_t ts = mi_atomic_load_relaxed(&abandoned);
1162 do {
1163 mi_atomic_store_ptr_release(mi_segment_t, &segment->abandoned_next, mi_tagged_segment_ptr(ts));
1164 next = mi_tagged_segment(segment, ts);
1165 } while (!mi_atomic_cas_weak_release(&abandoned, &ts, next));
1166 mi_atomic_increment_relaxed(&abandoned_count);
1167}
1168
1169// Wait until there are no more pending reads on segments that used to be in the abandoned list
1170// called for example from `arena.c` before decommitting

Callers 1

mi_segment_abandonFunction · 0.85

Calls 2

mi_tagged_segment_ptrFunction · 0.85
mi_tagged_segmentFunction · 0.85

Tested by

no test coverage detected