_ -> return Nothing
#endif
-cleanupRunningProcess :: (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle) -> IO ()
-cleanupRunningProcess p@(_, _, _, ph) =
- getProcessExitCode ph >>= maybe (cleanupProcess p) (const $ return ())
-
cleanupProcess
:: (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle) -> IO ()
return ()
where ignoreSigPipe = ignoreIOError ResourceVanished ePIPE
- ignorePermDenied = ignoreIOError PermissionDenied ePERM
+ ignorePermDenied = ignoreIOError PermissionDenied eACCES
ignoreIOError :: IOErrorType -> Errno -> IO () -> IO ()
ignoreIOError ioErrorType errno =
runSession' = runSession context initState
errorHandler = throwTo mainThreadId :: SessionException -> IO()
- serverLauncher = forkIO $ catch (serverHandler serverOut context) errorHandler
+ serverListenerLauncher =
+ forkIO $ catch (serverHandler serverOut context) errorHandler
server = (Just serverIn, Just serverOut, Nothing, serverProc)
- serverFinalizer tid = finally (timeout (messageTimeout config * 1000000)
+ serverAndListenerFinalizer tid =
+ finally (timeout (messageTimeout config * 1000000)
(runSession' exitServer))
- (cleanupRunningProcess server >> killThread tid)
+ (cleanupProcess server >> killThread tid)
- (result, _) <- bracket serverLauncher serverFinalizer (const $ runSession' session)
+ (result, _) <- bracket serverListenerLauncher serverAndListenerFinalizer
+ (const $ runSession' session)
return result
updateStateC :: ConduitM FromServerMessage FromServerMessage (StateT SessionState (ReaderT SessionContext IO)) ()