@@ -23,6 +23,7 @@ module Servant.Server.Internal
2323 , module Servant.Server.Internal.ServantErr
2424 ) where
2525
26+import Control.Exception (finally)
2627import Control.Monad.Trans (liftIO)
2728import qualified Data.ByteString as B
2829import qualified Data.ByteString.Char8 as BC8
@@ -400,11 +401,13 @@ instance HasServer Raw context where
400401 type ServerT Raw m = Application
401402
402403 route Proxy _ rawApplication = RawRouter $ \ env request respond -> do
403− (r, _) <- runDelayed rawApplication env request
404− case r of
405− Route app -> app request (respond . Route)
406− Fail a -> respond $ Fail a
407− FailFatal e -> respond $ FailFatal e
404+ (r, cleanup) <- runDelayed rawApplication env request
405+ go r request respond `finally` cleanup
406+
407+ where go r request respond = case r of
408+ Route app -> app request (respond . Route)
409+ Fail a -> respond $ Fail a
410+ FailFatal e -> respond $ FailFatal e
408411
409412-- | If you use 'ReqBody' in one of the endpoints for your API,
410413-- this automatically requires your server-side handler to be a function