warp 3.2.20 → 3.2.21
raw patch · 5 files changed
+16/−9 lines, 5 files
Files
- ChangeLog.md +6/−0
- Network/Wai/Handler/Warp/HTTP2/Request.hs +3/−5
- Network/Wai/Handler/Warp/HTTP2/Worker.hs +6/−1
- test/WithApplicationSpec.hs +0/−2
- warp.cabal +1/−1
ChangeLog.md view
@@ -1,8 +1,14 @@+## 3.2.21++* Fixing HTTP/2's timeout handler.+ ## 3.2.20+ * Fixing "Thread killed by timeout reaper when sending large HTTP/2 response" [#593](https://github.com/yesodweb/wai/issues/593) ## 3.2.19+ * Fixing 0-length body in HTTP/2 [#597](https://github.com/yesodweb/wai/issues/597) [#679](https://github.com/yesodweb/wai/issues/679)
Network/Wai/Handler/Warp/HTTP2/Request.hs view
@@ -24,9 +24,8 @@ import Network.Wai.Handler.Warp.HTTP2.Types import Network.Wai.Handler.Warp.HashMap (hashByteString) import Network.Wai.Handler.Warp.Imports-import Network.Wai.Handler.Warp.Request (pauseTimeoutKey, getFileInfoKey)+import Network.Wai.Handler.Warp.Request (getFileInfoKey) import qualified Network.Wai.Handler.Warp.Settings as S (Settings, settingsNoParsePath)-import qualified Network.Wai.Handler.Warp.Timeout as Timeout import Network.Wai.Handler.Warp.Types type MkReq = (TokenHeaderList,ValueTable) -> (Maybe Int,IO ByteString) -> IO (Request,InternalInfo)@@ -79,10 +78,9 @@ !path = H.extractPath unparsedPath !rawPath = if S.settingsNoParsePath settings then unparsedPath else path !h = hashByteString rawPath+ -- timeout handler must be overwritten with worker's one. !ii = toInternalInfo ii1 h- !th = threadHandle ii -- th must be overwritten with worker's one.- !vaultValue = Vault.insert pauseTimeoutKey (Timeout.pause th)- $ Vault.insert getFileInfoKey (getFileInfo ii)+ !vaultValue = Vault.insert getFileInfoKey (getFileInfo ii) $ Vault.insert getHTTP2DataKey (readIORef ref) $ Vault.insert setHTTP2DataKey (writeIORef ref) $ Vault.insert modifyHTTP2DataKey (modifyIORef' ref)
Network/Wai/Handler/Warp/HTTP2/Worker.hs view
@@ -16,12 +16,14 @@ import qualified Control.Exception as E import Data.ByteString.Builder (byteString) import Data.IORef+import qualified Data.Vault.Lazy as Vault import Network.HPACK import Network.HPACK.Token import qualified Network.HTTP.Types as H import Network.HTTP2 import Network.HTTP2.Priority import Network.Wai+import qualified Network.Wai.Handler.Warp.Timeout as Timeout import Network.Wai.Internal (Response(..), ResponseReceived(..), ResponseReceived(..)) import Network.Wai.Handler.Warp.FileInfoCache@@ -31,6 +33,7 @@ import Network.Wai.Handler.Warp.HTTP2.Request import Network.Wai.Handler.Warp.HTTP2.Types import Network.Wai.Handler.Warp.Imports hiding (insert)+import Network.Wai.Handler.Warp.Request (pauseTimeoutKey) import qualified Network.Wai.Handler.Warp.Response as R import qualified Network.Wai.Handler.Warp.Settings as S import qualified Network.Wai.Handler.Warp.Timeout as T@@ -244,7 +247,9 @@ T.resume th T.tickle th let ii' = ii { threadHandle = th }- app req $ responder ii' reqvt tcont strm req+ vaultValue = Vault.insert pauseTimeoutKey (Timeout.pause th) $ vault req+ req' = req { vault = vaultValue }+ app req' $ responder ii' reqvt tcont strm req' cont1 <- case ex of Right ResponseReceived -> return True Left e@(SomeException _)
test/WithApplicationSpec.hs view
@@ -2,10 +2,8 @@ module WithApplicationSpec where -import Control.Concurrent import Control.Exception import Network.HTTP.Types-import Network.Socket import Network.Wai import System.Environment import System.IO
warp.cabal view
@@ -1,5 +1,5 @@ Name: warp-Version: 3.2.20+Version: 3.2.21 Synopsis: A fast, light-weight web server for WAI applications. License: MIT License-file: LICENSE