let context = SessionContext serverIn absRootDir messageChan reqMap
initState = SessionState (IdInt 9)
- forkIO $ void $ runSession' meaninglessChan context initState (serverHandler serverOut)
+ threadId <- forkIO $ void $ runSession' meaninglessChan context initState (serverHandler serverOut)
(result, _) <- runSession' messageChan context initState session
terminateProcess serverProc
+ killThread threadId
return result
rspSema <- newEmptyMVar
passVar <- newEmptyMVar :: IO (MVar Bool)
- forkIO $ runSessionWithHandler (listenServer serverMsgs requestMap reqSema rspSema passVar) sessionDir $
- sendMessages clientMsgs reqSema rspSema
-
- takeMVar passVar
+ threadId <- forkIO $
+ runSessionWithHandler (listenServer serverMsgs requestMap reqSema rspSema passVar)
+ sessionDir
+ (sendMessages clientMsgs reqSema rspSema)
+
+ result <- takeMVar passVar
+ killThread threadId
+ return result
where
isClientMsg (FromClient _ _) = True