@@ -146,18 +146,18 @@ runSettingsConnectionMaker set getConn app = do
146146 (mkConn, addr) <- getConnLoop
147147 void . forkIO $ do
148148 th <- T.registerKillThread tm
149− conn <- mkConn
149+ bracket mkConn connClose $ \conn -> do
150150#if SENDFILEFD
151− let cleaner = Cleaner th fc
151+ let cleaner = Cleaner th fc
152152#else
153− let cleaner = Cleaner th
153+ let cleaner = Cleaner th
154154#endif
155− let serve = do
156− onOpen
157− restore $ serveConnection set cleaner port app conn addr
158− cleanup
159− cleanup = connClose conn >> T.cancel th >> onClose
160− handle onE (serve `onException` cleanup)
155+ let serve = do
156+ onOpen
157+ restore $ serveConnection set cleaner port app conn addr
158+ cleanup
159+ cleanup = T.cancel th >> onClose
160+ handle onE (serve `onException` cleanup)
161161 where
162162 -- FIXME: only IOEception is caught. What about other exceptions?
163163 getConnLoop = getConn `catch` \(e :: IOException) -> do