mirror of
https://github.com/cmur2/dyndnsd.git
synced 2026-11-14 12:55:58 +01:00
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.
This commit is contained in:
1 parent
645469f41e
commit
7fa9f499e1
10 files changed
+502
-29
No files matched your search
@@ -0,0 +1,34 @@
|
||||
# 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
|
||||
Reference in new issue
Block a user