Actions
Bug #16676
closed`#hash` can change Hash object from ar_table to st_table
Description
Points¶
- Hash representation
ar_table
has a problem from Ruby 2.6 (need to backport)
Problem¶
From Ruby 2.6 Hash
object is represented by ar_table
(for small (<=8) pairs) and st_table
.
To lookup hash table, Object#hash
is called to get a hash value, and this method call can modify Hash object.
It means that the code assumes the Hash representation is a ar_table
, but calling the #hash
method, it can be a st_table
.
I believe nobody modify Hash table from #hash
method (it should be pure, no-side effect method), but multi-threads can modify a Hash object, it can be exposed.
I will commit a patch soon.
Workaround¶
To avoid this issue, making a hash table in st_table
, for example:
h = {} # ar_table
10.times{|i| h[i] = i} # st_table because the number of pair == 10 (> 8)
h.clear
Files
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0