diff options
author | Alex Chinn <alex.chinn@shopify.com> | 2016-08-15 17:08:46 -0400 |
---|---|---|
committer | Alex Chinn <alex.chinn@shopify.com> | 2016-08-15 17:10:00 -0400 |
commit | 285d7cad6a4b93cdeea469e6cc4504a934907746 (patch) | |
tree | a347432f926845386f0d5b82878daf33d30df600 /actionpack/lib/action_controller | |
parent | c8d9a11df20c1ab238646012318ecb93ca3629d5 (diff) | |
download | rails-285d7cad6a4b93cdeea469e6cc4504a934907746.tar.gz rails-285d7cad6a4b93cdeea469e6cc4504a934907746.tar.bz2 rails-285d7cad6a4b93cdeea469e6cc4504a934907746.zip |
Fix deadlock that can occur when child live thread tries to load a constant after writing to the stream.
Diffstat (limited to 'actionpack/lib/action_controller')
-rw-r--r-- | actionpack/lib/action_controller/metal/live.rb | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/actionpack/lib/action_controller/metal/live.rb b/actionpack/lib/action_controller/metal/live.rb index a18055c899..26a16104db 100644 --- a/actionpack/lib/action_controller/metal/live.rb +++ b/actionpack/lib/action_controller/metal/live.rb @@ -205,7 +205,12 @@ module ActionController private def each_chunk(&block) - while str = @buf.pop + loop do + str = nil + ActiveSupport::Dependencies.interlock.permit_concurrent_loads do + str = @buf.pop + end + break unless str yield str end end |