From 12bfe2b4d9c02df1e6d16dbfd09209894e165abf Mon Sep 17 00:00:00 2001 From: Matt Green Date: Sat, 8 Feb 2014 19:01:02 -0500 Subject: [PATCH] Protect against stale reads in specs --- spec/elevate_spec.rb | 2 +- spec/support/threadsafe_proxy.rb | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 spec/support/threadsafe_proxy.rb diff --git a/spec/elevate_spec.rb b/spec/elevate_spec.rb index 088bb33..68a12a4 100644 --- a/spec/elevate_spec.rb +++ b/spec/elevate_spec.rb @@ -2,7 +2,7 @@ class TestController include Elevate def initialize - @invocations = {} + @invocations = ThreadsafeProxy.new({}) @counter = 0 @threads = [] @updates = [] diff --git a/spec/support/threadsafe_proxy.rb b/spec/support/threadsafe_proxy.rb new file mode 100644 index 0000000..470ca19 --- /dev/null +++ b/spec/support/threadsafe_proxy.rb @@ -0,0 +1,18 @@ +class ThreadsafeProxy + def initialize(target) + @mutex = Mutex.new + @target = target + end + + def method_missing(m, *args, &block) + @mutex.synchronize do + @target.__send__(m, *args, &block) + end + end + + def respond_to_missing?(m, include_private = false) + @mutex.synchronize do + @target.respond_to_missing?(m, include_private) + end + end +end