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
- .depth_for(model_class, record_id) ⇒ Object
- .enter!(model_class, record_id) ⇒ Object
- .leave!(model_class, record_id) ⇒ Object
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 |