aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activesupport/lib/active_support/concurrency/share_lock.rb2
-rw-r--r--activesupport/test/share_lock_test.rb4
2 files changed, 4 insertions, 2 deletions
diff --git a/activesupport/lib/active_support/concurrency/share_lock.rb b/activesupport/lib/active_support/concurrency/share_lock.rb
index 35193ea9f7..48edcfdaa5 100644
--- a/activesupport/lib/active_support/concurrency/share_lock.rb
+++ b/activesupport/lib/active_support/concurrency/share_lock.rb
@@ -52,7 +52,7 @@ module ActiveSupport
return false if no_wait
loose_shares = @sharing.delete(Thread.current)
- @waiting[Thread.current] = compatible
+ @waiting[Thread.current] = compatible if loose_shares
@cv.wait_while { busy?(purpose) }
diff --git a/activesupport/test/share_lock_test.rb b/activesupport/test/share_lock_test.rb
index fd50516581..87cd116429 100644
--- a/activesupport/test/share_lock_test.rb
+++ b/activesupport/test/share_lock_test.rb
@@ -147,7 +147,9 @@ class ShareLockTest < ActiveSupport::TestCase
assert_threads_not_stuck threads
scratch_pad_mutex.synchronize do
- assert_equal [:load, :load, :unload, :unload], scratch_pad
+ if use_upgrading
+ assert_equal [:load, :load, :unload, :unload], scratch_pad
+ end
scratch_pad.clear
end
end