Project

General

Profile

Actions

Bug #22064

closed

GC compaction breaks compare-by-identity sets

Bug #22064: GC compaction breaks compare-by-identity sets

Added by peterzhu2118 (Peter Zhu) 11 days ago. Updated about 11 hours ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:125466]

Description

GitHub PR: https://github.com/ruby/ruby/pull/16923

Compare-by-identity sets use the address for hashing, so we must pin it so the object does not move in GC compaction. Objects in a compare-by-identity set is not currently pinned, causing the set to be broken if the object is moved.

For example:

set = Set.new.compare_by_identity

o = Object.new
set.add(o)

puts set.include?(o)

GC.verify_compaction_references(expand_heap: true, toward: :empty)

puts set.include?(o)

It should output true twice, but it outputs true and false.

Actions

Also available in: PDF Atom