diff -r 2c43cd7d5ce6 -r 4e61c2a42121 gameServer/ClientIO.hs --- a/gameServer/ClientIO.hs Mon Jan 10 18:29:43 2011 +0300 +++ b/gameServer/ClientIO.hs Mon Jan 10 18:57:44 2011 +0300 @@ -57,17 +57,19 @@ -clientSendLoop :: Socket -> Chan [B.ByteString] -> ClientIndex -> IO () -clientSendLoop s chan ci = do +clientSendLoop :: Socket -> ThreadId -> Chan [B.ByteString] -> ClientIndex -> IO () +clientSendLoop s tId chan ci = do answer <- readChan chan Exception.handle (\(e :: Exception.IOException) -> when (not $ isQuit answer) $ sendQuit e) $ do sendAll s $ (B.unlines answer) `B.append` (B.singleton '\n') if (isQuit answer) then + do + killThread tId Exception.handle (\(_ :: Exception.IOException) -> putStrLn "error on sClose") $ sClose s else - clientSendLoop s chan ci + clientSendLoop s tId chan ci where --sendQuit e = writeChan coreChan $ ClientMessage (ci, ["QUIT", B.pack $ show e])