on master help sign in
Removed the evil buffer function (kills performance)
e3154beMichael Snoyman
Network/Wai/Enumerator.hs−23
@@ -15,8 +15,6 @@ module Network.Wai.Enumerator
15 -- ** FilePath
15 -- ** FilePath
16 , fromFile
16 , fromFile
17 , fromEitherFile
17 , fromEitherFile
18− -- * Filters
19− , buffer
20 ) where
18 ) where
21
19
22import Network.Wai (Enumerator (..), Source (..))
20import Network.Wai (Enumerator (..), Source (..))
@@ -117,24 +115,3 @@ fromFile fp = Enumerator $ \iter a0 -> withBinaryFile fp ReadMode $ \h ->
117-- be convenient for server implementations not optimizing file sending.
115-- be convenient for server implementations not optimizing file sending.
118fromEitherFile :: Either FilePath Enumerator -> Enumerator
116fromEitherFile :: Either FilePath Enumerator -> Enumerator
119fromEitherFile = either fromFile id
117fromEitherFile = either fromFile id
120−
121−-- | Buffer chunks until we have a chunk of 'defaultChunkSize', and then send
122−-- it.
123−buffer :: Enumerator -> Enumerator
124−buffer (Enumerator e) =
125− Enumerator go
126− where
127− go iter seed = do
128− res <- e (iter' iter) (B.empty, seed)
129− case res of
130− Left (_, seed') -> return $ Left seed'
131− Right (buff, seed') -> iter seed' buff
132− iter' iter (buff, seed) bs = do
133− if B.length buff + B.length bs < defaultChunkSize
134− then return $ Right (buff `B.append` bs, seed)
135− else do
136− let (x, y) = B.splitAt (defaultChunkSize - B.length buff) bs
137− res <- iter seed $ buff `B.append` x
138− case res of
139− Left seed' -> return $ Left (y, seed') -- y is ignored
140− Right seed' -> return $ Right (y, seed')