diff options
author | Matthew Draper <matthew@trebex.net> | 2015-07-21 08:50:50 +0930 |
---|---|---|
committer | Matthew Draper <matthew@trebex.net> | 2015-07-21 08:50:50 +0930 |
commit | 649d8173c31ab0b74ef359e692eadf46b5da911d (patch) | |
tree | a6daad575a51af0963e809881774cc16f059f98d /activesupport | |
parent | b3d78e8c23e3cbd5325719474efb9f7ee4168f72 (diff) | |
download | rails-649d8173c31ab0b74ef359e692eadf46b5da911d.tar.gz rails-649d8173c31ab0b74ef359e692eadf46b5da911d.tar.bz2 rails-649d8173c31ab0b74ef359e692eadf46b5da911d.zip |
Order of execution is only guaranteed if upgrading
If the thread isn't yet holding any form of lock, it has no claim over
what may / may not run while it's blocked.
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/concurrency/share_lock.rb | 2 | ||||
-rw-r--r-- | activesupport/test/share_lock_test.rb | 4 |
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 |