Skip to content

Commit

Permalink
Merge pull request #884 from ruby-concurrency/thread-local
Browse files Browse the repository at this point in the history
Do not iterate over hash which might conflict with new pair addition
  • Loading branch information
pitr-ch committed Sep 21, 2020
2 parents 31669c6 + c4cbc96 commit 63a6907
Showing 1 changed file with 4 additions and 1 deletion.
Expand Up @@ -97,7 +97,10 @@ def self.thread_local_finalizer(index)
# The cost of GC'ing a TLV is linear in the number of threads using TLVs
# But that is natural! More threads means more storage is used per TLV
# So naturally more CPU time is required to free more storage
THREAD_LOCAL_ARRAYS.each_value { |array| array[index] = nil }
#
# DO NOT use each_value which might conflict with new pair assignment
# into the hash in #value= method
THREAD_LOCAL_ARRAYS.values.each { |array| array[index] = nil }
# free index has to be published after the arrays are cleared
FREE.push(index)
end
Expand Down

0 comments on commit 63a6907

Please sign in to comment.