aboutsummaryrefslogtreecommitdiffstats
path: root/actioncable/lib/action_cable/subscription_adapter
diff options
context:
space:
mode:
authorMatthew Draper <matthew@trebex.net>2016-11-30 22:22:36 +1030
committerMatthew Draper <matthew@trebex.net>2016-11-30 22:55:04 +1030
commit162e889f16ceb47978fe9bc81ac0b46672f05ff0 (patch)
treedad4cd7f849ef749c10060c50196f1b2ec670604 /actioncable/lib/action_cable/subscription_adapter
parent0e97cd1a0d3e7dbe2b99eb111e005d7c9d7002b7 (diff)
downloadrails-162e889f16ceb47978fe9bc81ac0b46672f05ff0.tar.gz
rails-162e889f16ceb47978fe9bc81ac0b46672f05ff0.tar.bz2
rails-162e889f16ceb47978fe9bc81ac0b46672f05ff0.zip
Prevent race condition when launching EventMachine reactor
reactor_running? will be true just after the thread enters EventMachine.run; reactor_thread only gets set after the internal initialize_event_machine method has been called, the C extension is set up, and it is entering its run loop.
Diffstat (limited to 'actioncable/lib/action_cable/subscription_adapter')
-rw-r--r--actioncable/lib/action_cable/subscription_adapter/evented_redis.rb4
1 files changed, 2 insertions, 2 deletions
diff --git a/actioncable/lib/action_cable/subscription_adapter/evented_redis.rb b/actioncable/lib/action_cable/subscription_adapter/evented_redis.rb
index bcd46d2a0e..c3018c5281 100644
--- a/actioncable/lib/action_cable/subscription_adapter/evented_redis.rb
+++ b/actioncable/lib/action_cable/subscription_adapter/evented_redis.rb
@@ -68,10 +68,10 @@ module ActionCable
end
def ensure_reactor_running
- return if EventMachine.reactor_running?
+ return if EventMachine.reactor_running? && EventMachine.reactor_thread
@@mutex.synchronize do
Thread.new { EventMachine.run } unless EventMachine.reactor_running?
- Thread.pass until EventMachine.reactor_running?
+ Thread.pass until EventMachine.reactor_running? && EventMachine.reactor_thread
end
end
end