Skip to content

Commit 065f46c

Browse files
committed
don't reset a segment thread id when iterating
1 parent 537c51e commit 065f46c

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

src/arena-abandoned.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,10 @@ static bool mi_arena_segment_os_clear_abandoned(mi_segment_t* segment, bool take
8282
segment->abandoned_os_prev = NULL;
8383
mi_atomic_decrement_relaxed(&subproc->abandoned_count);
8484
mi_atomic_decrement_relaxed(&subproc->abandoned_os_list_count);
85-
mi_atomic_store_release(&segment->thread_id, _mi_thread_id());
85+
if (take_lock) {
86+
// don't set the thread_id when iterating
87+
mi_atomic_store_release(&segment->thread_id, _mi_thread_id());
88+
}
8689
reclaimed = true;
8790
}
8891
if (take_lock) { mi_lock_release(&segment->subproc->abandoned_os_lock); }

src/segment.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -836,6 +836,7 @@ void _mi_segment_page_abandon(mi_page_t* page, mi_segments_tld_t* tld) {
836836
// Possibly clear pages and check if free space is available
837837
static bool mi_segment_check_free(mi_segment_t* segment, size_t block_size, bool* all_pages_free)
838838
{
839+
mi_assert_internal(mi_atomic_load_relaxed(&segment->thread_id) == 0);
839840
bool has_page = false;
840841
size_t pages_used = 0;
841842
size_t pages_used_empty = 0;

0 commit comments

Comments
 (0)