@@ -23,10 +23,10 @@ import Network.Wai.Internal (Response(..), ResponseReceived(..), ResponseReceive
2323
2424----------------------------------------------------------------
2525
26−type Responder = Stream -> Priority -> Request -> Response -> IO ResponseReceived
26+type Responder = T.Handle -> Stream -> Priority -> Request -> Response -> IO ResponseReceived
2727
2828response :: Context -> Responder
29−response Context{outputQ} strm pri req rsp = do
29+response Context{outputQ} th strm pri req rsp = do
3030 case rsp of
3131 ResponseStream _ _ strmbdy -> do
3232 -- fixme: spawn a new worker thread.
@@ -38,13 +38,14 @@ response Context{outputQ} strm pri req rsp = do
3838 sq <- newTBQueueIO 10
3939 tvar <- newTVarIO SyncNone
4040 enqueue outputQ (OResponse strm rsp (Persist sq tvar)) pri
41− let push b = atomically $ writeTBQueue sq (SBuilder b)
41+ let push b = do
42+ atomically $ writeTBQueue sq (SBuilder b)
43+ T.tickle th
4244 flush = atomically $ writeTBQueue sq SFlush
4345 -- Since we must not enqueue an empty queue to the priority
4446 -- queue, we spawn a thread to ensure that the designated
4547 -- queue is not empty.
4648 void $ forkIO $ waiter tvar sq (enqueue outputQ) strm pri
47− -- fixme: tickle?
4849 strmbdy push flush
4950 atomically $ writeTBQueue sq SFinish
5051 _ -> do
@@ -71,7 +72,7 @@ worker ctx@Context{inputQ,outputQ} set tm app responder = do
7172 writeIORef ref $ Just (strm,req)
7273 T.resume th
7374 T.tickle th
74− app req $ responder strm pri req
75+ app req $ responder th strm pri req
7576 cont <- case ex of
7677 Right ResponseReceived -> return True
7778 Left e@(SomeException _)