on master help sign in
making more strict.
commit8f780224b9d586d1feabc74d9360fc9dfb06a804 authorKazu Yamamoto <kazu@iij.ad.jp> dateThu 17 Dec 2015, 15:49 (11 years ago) parent6fb698f
1 file changed+19−19
warp/Network/Wai/Handler/Warp/HTTP2/Receiver.hs+19−19
warp/Network/Wai/Handler/Warp/HTTP2/Receiver.hs+19−19
@@ -40,12 +40,12 @@ frameReceiver ctx mkreq recvN = loop `E.catch` sendGoaway
4040 sendGoaway e
4141 | Just (ConnectionError err msg) <- E.fromException e = do
4242 csid <- readIORef currentStreamId
43− let frame = goawayFrame csid err msg
43+ let !frame = goawayFrame csid err msg
4444 enqueueControl outputQ 0 $ OGoaway frame
4545 | otherwise = return ()
4646
4747 sendReset err sid = do
48− let frame = resetFrame err sid
48+ let !frame = resetFrame err sid
4949 enqueueControl outputQ 0 $ OFrame frame
5050
5151 loop = do
@@ -176,7 +176,7 @@ control FrameSettings header@FrameHeader{flags} bs Context{http2settings, output
176176 Nothing -> return ()
177177 unless (testAck flags) $ do
178178 modifyIORef' http2settings $ \old -> updateSettings old alist
179− let frame = settingsFrame setAck []
179+ let !frame = settingsFrame setAck []
180180 enqueueControl outputQ 0 $ OSettings frame alist
181181 return True
182182
@@ -184,7 +184,7 @@ control FramePing FrameHeader{flags} bs Context{outputQ} =
184184 if testAck flags then
185185 E.throwIO $ ConnectionError ProtocolError "the ack flag of this ping frame must not be set"
186186 else do
187− let frame = pingFrame bs
187+ let !frame = pingFrame bs
188188 enqueueControl outputQ 0 $ OFrame frame
189189 return True
190190
@@ -194,7 +194,7 @@ control FrameGoAway _ _ Context{outputQ} = do
194194
195195control FrameWindowUpdate header bs Context{connectionWindow} = do
196196 WindowUpdateFrame n <- guardIt $ decodeWindowUpdateFrame header bs
197− w <- (n +) <$> atomically (readTVar connectionWindow)
197+ !w <- (n +) <$> atomically (readTVar connectionWindow)
198198 when (isWindowOverflow w) $ E.throwIO $ ConnectionError FlowControlError "control window should be less than 2^31"
199199 atomically $ writeTVar connectionWindow w
200200 return True
@@ -225,8 +225,8 @@ stream FrameHeaders header@FrameHeader{flags} bs ctx (Open JustOpened) Stream{st
225225 Just p -> do
226226 checkPriority p streamNumber
227227 return p
228− let endOfStream = testEndStream flags
229− endOfHeader = testEndHeader flags
228+ let !endOfStream = testEndStream flags
229+ !endOfHeader = testEndHeader flags
230230 if endOfHeader then do
231231 hdr <- hpackDecodeHeader frag ctx
232232 return $ if endOfStream then
@@ -241,7 +241,7 @@ stream FrameHeaders header@FrameHeader{flags} bs _ (Open (Body q)) _ = do
241241 -- trailer is not supported.
242242 -- let's read and ignore it.
243243 HeadersFrame _ _ <- guardIt $ decodeHeadersFrame header bs
244− let endOfStream = testEndStream flags
244+ let !endOfStream = testEndStream flags
245245 if endOfStream then do
246246 atomically $ writeTQueue q ""
247247 return HalfClosed
@@ -255,14 +255,14 @@ stream FrameData
255255 Context{outputQ} s@(Open (Body q))
256256 Stream{streamNumber,streamBodyLength,streamContentLength} = do
257257 DataFrame body <- guardIt $ decodeDataFrame header bs
258− let endOfStream = testEndStream flags
258+ let !endOfStream = testEndStream flags
259259 len0 <- readIORef streamBodyLength
260260 let !len = len0 + payloadLength
261261 writeIORef streamBodyLength len
262262 when (payloadLength /= 0) $ do
263− let frame1 = windowUpdateFrame 0 payloadLength
264− frame2 = windowUpdateFrame streamNumber payloadLength
265− frame = frame1 `BS.append` frame2
263+ let !frame1 = windowUpdateFrame 0 payloadLength
264+ !frame2 = windowUpdateFrame streamNumber payloadLength
265+ !frame = frame1 `BS.append` frame2
266266 enqueueControl outputQ 0 $ OFrame frame
267267 atomically $ writeTQueue q body
268268 if endOfStream then do
@@ -276,16 +276,16 @@ stream FrameData
276276 return s
277277
278278stream FrameContinuation FrameHeader{flags} frag ctx (Open (Continued rfrags siz n endOfStream pri)) _ = do
279− let endOfHeader = testEndHeader flags
280− rfrags' = frag : rfrags
281− siz' = siz + BS.length frag
282− n' = n + 1
279+ let !endOfHeader = testEndHeader flags
280+ !rfrags' = frag : rfrags
281+ !siz' = siz + BS.length frag
282+ !n' = n + 1
283283 when (siz' > 51200) $ -- fixme: hard coding: 50K
284284 E.throwIO $ ConnectionError EnhanceYourCalm "Header is too big"
285285 when (n' > 10) $ -- fixme: hard coding
286286 E.throwIO $ ConnectionError EnhanceYourCalm "Header is too fragmented"
287287 if endOfHeader then do
288− let hdrblk = BS.concat $ reverse rfrags'
288+ let !hdrblk = BS.concat $ reverse rfrags'
289289 hdr <- hpackDecodeHeader hdrblk ctx
290290 return $ if endOfStream then
291291 Open (NoBody hdr pri)
@@ -296,7 +296,7 @@ stream FrameContinuation FrameHeader{flags} frag ctx (Open (Continued rfrags siz
296296
297297stream FrameWindowUpdate header@FrameHeader{streamId} bs _ s Stream{streamWindow} = do
298298 WindowUpdateFrame n <- guardIt $ decodeWindowUpdateFrame header bs
299− w <- (n +) <$> atomically (readTVar streamWindow)
299+ !w <- (n +) <$> atomically (readTVar streamWindow)
300300 when (isWindowOverflow w) $
301301 E.throwIO $ StreamError FlowControlError streamId
302302 atomically $ writeTVar streamWindow w
@@ -304,7 +304,7 @@ stream FrameWindowUpdate header@FrameHeader{streamId} bs _ s Stream{streamWindow
304304
305305stream FrameRSTStream header bs ctx _ strm = do
306306 RSTStreamFrame e <- guardIt $ decoderstStreamFrame header bs
307− let cc = Reset e
307+ let !cc = Reset e
308308 closed ctx strm cc
309309 return $ Closed cc -- will be written to streamState again
310310