Files
dyndnsd/lib/metriks/atomic.rb
T
cn 7fa9f499e1 gems: include vendored metrisk without hitime dependency
hitime is only needed for Metriks::Timer and requires native extensions.
Those do not compile with default settings under Ubuntu 26.04 or Alpine 3.24.
2026-11-13 17:35:46 +01:00

35 lines
779 B
Ruby

# Minimal pure-Ruby replacement for the 'atomic' gem, covering the exact API
# the vendored metriks code uses (Atomic.new, #value, #value=, #update,
# #compare_and_swap). Mutex-guarded instead of relying on a native extension.
module Metriks
class Atomic
def initialize(value = nil)
@value = value
@mutex = Mutex.new
end
def value
@mutex.synchronize { @value }
end
def value=(new_value)
@mutex.synchronize { @value = new_value }
end
def update
@mutex.synchronize { @value = yield(@value) }
end
def compare_and_swap(expected, new_value)
@mutex.synchronize do
if @value == expected
@value = new_value
true
else
false
end
end
end
end
end