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.
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 |