@@ -7,7 +7,6 @@ module Network.Wai.Handler.Warp.HTTP2.Sender (frameSender) where
77#if __GLASGOW_HASKELL__ < 709
88import Control.Applicative
99#endif
10−import Control.Concurrent (forkIO)
1110import Control.Concurrent.STM
1211import qualified Control.Exception as E
1312import Control.Monad (unless, void, when)
@@ -22,6 +21,7 @@ import Network.Wai
2221import Network.Wai.Handler.Warp.Buffer
2322import Network.Wai.Handler.Warp.HTTP2.EncodeFrame
2423import Network.Wai.Handler.Warp.HTTP2.HPACK
24+import Network.Wai.Handler.Warp.HTTP2.Manager (Manager)
2525import Network.Wai.Handler.Warp.HTTP2.Types
2626import Network.Wai.Handler.Warp.IORef
2727import qualified Network.Wai.Handler.Warp.Settings as S
@@ -61,10 +61,10 @@ waitStreaming tbq = do
6161 isEmpty <- isEmptyTBQueue tbq
6262 check (isEmpty == False)
6363
64−frameSender :: Context -> Connection -> InternalInfo -> S.Settings -> IO ()
64+frameSender :: Context -> Connection -> InternalInfo -> S.Settings -> Manager -> IO ()
6565frameSender ctx@Context{outputQ,controlQ,connectionWindow,encodeDynamicTable}
6666 conn@Connection{connWriteBuffer,connBufferSize,connSendAll}
67− ii settings = loop `E.catch` ignore
67+ ii settings mgr = loop `E.catch` ignore
6868 where
6969 dequeueControl = Left <$> readTQueue controlQ
7070 dequeueOutput = Right <$> do
@@ -155,13 +155,13 @@ frameSender ctx@Context{outputQ,controlQ,connectionWindow,encodeDynamicTable}
155155 checkStreaming tbq = do
156156 isEmpty <- atomically $ isEmptyTBQueue tbq
157157 if isEmpty then
158− void . forkIO $ enqueueWhenReady (waitStreaming tbq) outputQ out
158+ forkAndEnqueueWhenReady (waitStreaming tbq) outputQ out mgr
159159 else
160160 checkStreamWindowSize
161161 checkStreamWindowSize = do
162162 sws <- getStreamWindowSize strm
163163 if sws == 0 then do
164− void . forkIO $ enqueueWhenReady (waitStreamWindowSize strm) outputQ out
164+ forkAndEnqueueWhenReady (waitStreamWindowSize strm) outputQ out mgr
165165 else
166166 body sws
167167 resetStream e = do