lib/logstash-docket/util/threadsafe_wrapper.rb (25 lines of code) (raw):
# encoding: utf-8
require 'monitor'
module LogstashDocket
module Util
##
# A {@link ThreadsafeWrapper} ensures all access to
# the wrapped object is thread-safe.
class ThreadsafeWrapper
def self.for(object)
new(object)
end
private_class_method :new
def initialize(object)
@object = object
@monitor = Mutex.new
end
def method_missing(method, *args, &block)
@monitor.synchronize do
@object.public_send(method, *args, &block)
end
end
def respond_to_missing?(method, include_private = false)
@monitor.synchronize do
@object.respond_to?(method, include_private)
end
end
end
end
end