@@ -12,6 +12,7 @@ import qualified Control.Exception as E
1212import Control.Monad (unless, void, when)
1313import qualified Data.ByteString as BS
1414import qualified Data.ByteString.Builder.Extra as B
15+import Data.Maybe (isNothing)
1516import Foreign.Ptr
1617import Network.HPACK (setLimitForEncoding)
1718import Network.HTTP2
@@ -231,12 +232,10 @@ frameSender ctx@Context{outputQ,connectionWindow,encodeDynamicTable}
231232 Nothing -> setEndStream defaultFlags
232233 _ -> defaultFlags
233234 fillFrameHeader FrameData datPayloadLen sid flag buf
234− -- "closed" must be before "connSendAll". If not,
235+ -- "closed" must be before "flushN". If not,
235236 -- the context would be switched to the receiver,
236237 -- resulting the inconsistency of concurrency.
237− case mnext of
238− Nothing -> closed ctx strm Finished
239− _ -> return ()
238+ when (isNothing mnext) $ closed ctx strm Finished
240239 flushN total
241240 atomically $ modifyTVar' connectionWindow (subtract datPayloadLen)
242241 atomically $ modifyTVar' (streamWindow strm) (subtract datPayloadLen)