@@ -27,7 +27,7 @@ import Network
2727 , withSocketsDo)
2828import Control.Exception (bracket, finally, Exception)
2929import System.IO (Handle, hClose)
30−import Control.Concurrent
30+import Control.Concurrent (forkIO)
3131import Control.Monad (unless)
3232import Data.Maybe (isJust, fromJust, fromMaybe)
3333
@@ -118,7 +118,6 @@ parseRequest port lines' handle remoteHost' = do
118118 bs <- lookup ReqContentLength heads
119119 let str = SL.unpack bs
120120 Safe.readMay str
121− mlen <- newMVar len
122121 let (serverName', _) = SL.breakChar ':' host
123122 return $ Request
124123 { requestMethod = method
@@ -129,24 +128,23 @@ parseRequest port lines' handle remoteHost' = do
129128 , serverPort = port
130129 , requestHeaders = heads
131130 , urlScheme = HTTP
132− , requestBody = requestBodyHandle handle mlen
131+ , requestBody = requestBodyHandle handle len
133132 , errorHandler = System.IO.hPutStr System.IO.stderr
134133 , remoteHost = B8.pack remoteHost'
135134 }
136135
137−requestBodyHandle :: Handle -> MVar Int -> Enumerator
138−requestBodyHandle h mlen = Enumerator $ \iter accum ->
139− modifyMVar mlen (helper iter accum) where
140− helper _ a 0 = return (0, Right a)
141− helper iter a len = do
136+requestBodyHandle :: Handle -> Int -> Enumerator
137+requestBodyHandle h len0 = Enumerator $ helper len0 where
138+ helper 0 _ a = return $ Right a
139+ helper len iter a = do
142140 let maxChunkSize = 1024
143141 bs <- BS.hGet h $ min len maxChunkSize
144142 let newLen = len - BS.length bs
145143 putStrLn $ "reading a chunk of size " ++ show (BS.length bs)
146144 ea' <- iter a bs
147145 case ea' of
148− Left a' -> return (newLen, Left a')
149− Right a' -> helper iter a' newLen
146+ Left a' -> return $ Left a'
147+ Right a' -> helper newLen iter a'
150148
151149parseFirst :: (StringLike s, MonadFailure InvalidRequest m) =>
152150 s