|
|
|
@ -78,20 +78,17 @@ startThreadsWith :: (Stanza -> IO ()) |
|
|
|
TMVar Stream, |
|
|
|
TMVar Stream, |
|
|
|
ThreadId)) |
|
|
|
ThreadId)) |
|
|
|
startThreadsWith stanzaHandler eh con = do |
|
|
|
startThreadsWith stanzaHandler eh con = do |
|
|
|
rd <- withStream' (gets $ streamSend . streamHandle >>= \d -> return $ Right d) con |
|
|
|
read' <- withStream' (gets $ streamSend . streamHandle) con |
|
|
|
case rd of |
|
|
|
writeLock <- newTMVarIO read' |
|
|
|
Left e -> return $ Left e |
|
|
|
conS <- newTMVarIO con |
|
|
|
Right read' -> do |
|
|
|
-- lw <- forkIO $ writeWorker outC writeLock |
|
|
|
writeLock <- newTMVarIO read' |
|
|
|
cp <- forkIO $ connPersist writeLock |
|
|
|
conS <- newTMVarIO con |
|
|
|
rdw <- forkIO $ readWorker stanzaHandler (noCon eh) conS |
|
|
|
-- lw <- forkIO $ writeWorker outC writeLock |
|
|
|
return $ Right ( killConnection writeLock [rdw, cp] |
|
|
|
cp <- forkIO $ connPersist writeLock |
|
|
|
, writeLock |
|
|
|
rdw <- forkIO $ readWorker stanzaHandler (noCon eh) conS |
|
|
|
, conS |
|
|
|
return $ Right ( killConnection writeLock [rdw, cp] |
|
|
|
, rdw |
|
|
|
, writeLock |
|
|
|
) |
|
|
|
, conS |
|
|
|
|
|
|
|
, rdw |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
where |
|
|
|
where |
|
|
|
killConnection writeLock threads = liftIO $ do |
|
|
|
killConnection writeLock threads = liftIO $ do |
|
|
|
_ <- atomically $ takeTMVar writeLock -- Should we put it back? |
|
|
|
_ <- atomically $ takeTMVar writeLock -- Should we put it back? |
|
|
|
|