From d1766ef53ddbd91ff414896983e8f3e6b39d2dec Mon Sep 17 00:00:00 2001
From: Sean Griffin <sean@seantheprogrammer.com>
Date: Wed, 13 Apr 2016 13:08:00 -0600
Subject: Run Action Cable callbacks through the worker pool

Alternate implementation of #24162 with tests. The code had diverged
too far on master to pull that implemenation directly.

Fixes #23778
Close #24162

[Mattew Draper & Sean Griffin]
---
 actioncable/lib/action_cable/channel/streams.rb | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

(limited to 'actioncable/lib')

diff --git a/actioncable/lib/action_cable/channel/streams.rb b/actioncable/lib/action_cable/channel/streams.rb
index f654ce0bfa..8b46ac216a 100644
--- a/actioncable/lib/action_cable/channel/streams.rb
+++ b/actioncable/lib/action_cable/channel/streams.rb
@@ -76,8 +76,11 @@ module ActionCable
         # Don't send the confirmation until pubsub#subscribe is successful
         defer_subscription_confirmation!
 
-        if handler = callback || block
-          handler = -> message { handler.(coder.decode(message)) } if coder
+        if user_handler = callback || block
+          user_handler = -> message { handler.(coder.decode(message)) } if coder
+          handler = -> message do
+            connection.worker_pool.async_invoke(user_handler, :call, message)
+          end
         else
           handler = default_stream_handler(broadcasting, coder: coder)
         end
-- 
cgit v1.2.3