Module: RaceGuard::Context::RmwWithLockBlockDepth

Defined in:
lib/race_guard/context.rb

Overview

Per-thread depth for nested with_lock user blocks (4.2). Key: [model_class.object_id, id].

Constant Summary collapse

KEY =
:__race_guard_rmw_with_lock_by_row

Class Method Summary collapse

Class Method Details

.depth_for(model_class, record_id) ⇒ Object



43
44
45
46
47
48
# File 'lib/race_guard/context.rb', line 43

def depth_for(model_class, record_id)
  h = Thread.current[KEY]
  return 0 unless h

  h[[model_class.object_id, record_id]].to_i
end

.enter!(model_class, record_id) ⇒ Object



23
24
25
26
27
# File 'lib/race_guard/context.rb', line 23

def enter!(model_class, record_id)
  h = (Thread.current[KEY] ||= {})
  k = [model_class.object_id, record_id]
  h[k] = h[k].to_i + 1
end

.leave!(model_class, record_id) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/race_guard/context.rb', line 29

def leave!(model_class, record_id)
  h = Thread.current[KEY]
  return unless h

  k = [model_class.object_id, record_id]
  d = h[k].to_i - 1
  if d <= 0
    h.delete(k)
  else
    h[k] = d
  end
  nil
end