Method: Contrast::Agent::Assess::Finalizers::Hash#pre_freeze

Defined in:
lib/contrast/agent/assess/finalizers/hash.rb

#pre_freeze(key) ⇒ Object

Frozen things cannot be finalized. To avoid any issue here, we intercept the #freeze call and set finalizers on the Object. To ensure later we know it’s been pre-finalized, we add it’s __id__ to our tracking.

Parameters:

  • key (Object)

    the Object on which we need to pre-define finalizers



91
92
93
94
95
96
97
98
99
100
101
# File 'lib/contrast/agent/assess/finalizers/hash.rb', line 91

def pre_freeze key
  return unless ::Contrast::AGENT.enabled? && ::Contrast::ASSESS.enabled?
  return if key.cs__frozen?
  return if FROZEN_FINALIZED_IDS.include?(key.__id__)

  ObjectSpace.define_finalizer(key, finalizing_proc)

  FROZEN_FINALIZED_IDS << key.__id__
rescue StandardError => _e
  nil
end