Project

General

Profile

Actions

Bug #22251

open

ObjectSpace::WeakMap#size can return a stale value

Bug #22251: ObjectSpace::WeakMap#size can return a stale value

Added by Eregon (Benoit Daloze) about 16 hours ago. Updated about 10 hours ago.

Status:
Open
Assignee:
-
Target version:
-
ruby -v:
ruby 4.0.6 (2026-07-14 revision 03b6d3f889) +PRISM [arm64-darwin25]
[ruby-core:126434]

Description

$ ruby -e 'm = ObjectSpace::WeakMap.new; Thread.new { m[Object.new] = Object.new }.join; GC.start; p m.size; p m.keys; p m.size'
1
[]
0

The first line is 1 but I would expect 0.
Interestingly calling #keys seems to force an update.

If I GC twice then it seems correct:

$ ruby -e 'm = ObjectSpace::WeakMap.new; Thread.new { m[Object.new] = Object.new }.join; GC.start; GC.start; p m.size; p m.keys; p m.size'
0
[]
0

Could we decrease size whenever we "remove" an entry?

Apologies if that's already known, I searched for an existing issue for this but didn't find anything.

Actions

Also available in: PDF Atom