warp 1.3.4.1 → 1.3.4.2
raw patch · 6 files changed
+22/−25 lines, 6 files
Files
- Network/Wai/Handler/Warp/FdCache.hs +2/−2
- Network/Wai/Handler/Warp/Response.hs +14/−15
- Network/Wai/Handler/Warp/ResponseHeader.hs +3/−3
- Network/Wai/Handler/Warp/Run.hs +1/−2
- Network/Wai/Handler/Warp/Timeout.hs +1/−2
- warp.cabal +1/−1
Network/Wai/Handler/Warp/FdCache.hs view
@@ -114,7 +114,7 @@ getFd' Nothing = do ent@(FdEntry _ fd mst) <- newFdEntry path update mfc (insert key ent)- return $ (fd, refresh mst)+ return (fd, refresh mst) getFd' (Just (FdEntry _ fd mst)) = do refresh mst- return $ (fd, refresh mst)+ return (fd, refresh mst)
Network/Wai/Handler/Warp/Response.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE BangPatterns #-} {-# LANGUAGE CPP #-} module Network.Wai.Handler.Warp.Response (@@ -51,18 +50,18 @@ sendResponse' (Right (lengthyHeaders, cl)) | hasBody s req = liftIO $ do+ lheader <- composeHeader version s lengthyHeaders connSendFile conn path beg end (T.tickle th) [lheader] cleaner T.tickle th return isPersist | otherwise = liftIO $ do- connSendAll conn $ composeHeader version s hs+ composeHeader version s hs >>= connSendAll conn T.tickle th return isPersist -- FIXME isKeepAlive? where (beg,end) = case mpart of Nothing -> (0,cl) Just prt -> (filePartOffset prt, filePartByteCount prt)- lheader = composeHeader version s lengthyHeaders version = httpVersion req (isPersist,_) = infoFromRequest req @@ -75,21 +74,21 @@ sendResponse cleaner req conn (ResponseBuilder s hs b) | hasBody s req = liftIO $ do+ header <- composeHeaderBuilder version s hs needsChunked+ let body+ | needsChunked = header `mappend` chunkedTransferEncoding b+ `mappend` chunkedTransferTerminator+ | otherwise = header `mappend` b flip toByteStringIO body $ \bs -> do connSendAll conn bs T.tickle th return isKeepAlive | otherwise = liftIO $ do- connSendAll conn $ composeHeader version s hs+ composeHeader version s hs >>= connSendAll conn T.tickle th return isPersist where th = threadHandle cleaner- header = composeHeaderBuilder version s hs needsChunked- body- | needsChunked = header `mappend` chunkedTransferEncoding b- `mappend` chunkedTransferTerminator- | otherwise = header `mappend` b version = httpVersion req reqinfo@(isPersist,_) = infoFromRequest req (isKeepAlive, needsChunked) = infoFromResponse hs reqinfo@@ -98,16 +97,16 @@ sendResponse cleaner req conn (ResponseSource s hs bodyFlush) | hasBody s req = do+ header <- liftIO $ composeHeaderBuilder version s hs needsChunked let src = CL.sourceList [header] `mappend` cbody src $$ builderToByteString =$ connSink conn th return isKeepAlive | otherwise = liftIO $ do- connSendAll conn $ composeHeader version s hs+ composeHeader version s hs >>= connSendAll conn T.tickle th return isPersist where th = threadHandle cleaner- header = composeHeaderBuilder version s hs needsChunked body = mapOutput (\x -> case x of Flush -> flush Chunk builder -> builder) bodyFlush@@ -205,11 +204,11 @@ ---------------------------------------------------------------- -composeHeader :: H.HttpVersion -> H.Status -> H.ResponseHeaders -> ByteString+composeHeader :: H.HttpVersion -> H.Status -> H.ResponseHeaders -> IO ByteString composeHeader version s hs = RH.composeHeader version s (addServerHeader hs) -composeHeaderBuilder :: H.HttpVersion -> H.Status -> H.ResponseHeaders -> Bool -> Builder+composeHeaderBuilder :: H.HttpVersion -> H.Status -> H.ResponseHeaders -> Bool -> IO Builder composeHeaderBuilder ver s hs True =- fromByteString $ composeHeader ver s (addEncodingHeader hs)+ fromByteString <$> composeHeader ver s (addEncodingHeader hs) composeHeaderBuilder ver s hs False =- fromByteString $ composeHeader ver s hs+ fromByteString <$> composeHeader ver s hs
Network/Wai/Handler/Warp/ResponseHeader.hs view
@@ -6,7 +6,7 @@ import Control.Monad import Data.ByteString (ByteString) import qualified Data.ByteString as S-import Data.ByteString.Internal (ByteString(..), unsafeCreate, memcpy)+import Data.ByteString.Internal (ByteString(..), create, memcpy) import qualified Data.CaseInsensitive as CI import Data.List (foldl') import Data.Word (Word8)@@ -17,8 +17,8 @@ ---------------------------------------------------------------- -composeHeader :: H.HttpVersion -> H.Status -> H.ResponseHeaders -> ByteString-composeHeader !httpversion !status !responseHeaders = unsafeCreate len $ \ptr -> do+composeHeader :: H.HttpVersion -> H.Status -> H.ResponseHeaders -> IO ByteString+composeHeader !httpversion !status !responseHeaders = create len $ \ptr -> do ptr1 <- copyStatus ptr httpversion status ptr2 <- copyHeaders ptr1 responseHeaders void $ copyCRLF ptr2
Network/Wai/Handler/Warp/Run.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE CPP #-} module Network.Wai.Handler.Warp.Run where @@ -154,7 +153,7 @@ restore $ serveConnection set cleaner port app conn addr cleanup cleanup = connClose conn >> T.cancel th >> onClose- handle onE $ (serve `onException` cleanup)+ handle onE (serve `onException` cleanup) where -- FIXME: only IOEception is caught. What about other exceptions? getConnLoop = getConn `catch` \(e :: IOException) -> do
Network/Wai/Handler/Warp/Timeout.hs view
@@ -14,8 +14,7 @@ import Control.Concurrent (forkIO, threadDelay, myThreadId, killThread) import qualified Control.Exception as E-import Control.Monad (forever)-import Control.Monad (void)+import Control.Monad (forever, void) import qualified Data.IORef as I import System.IO.Unsafe (unsafePerformIO)
warp.cabal view
@@ -1,5 +1,5 @@ Name: warp-Version: 1.3.4.1+Version: 1.3.4.2 Synopsis: A fast, light-weight web server for WAI applications. License: MIT License-file: LICENSE