diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2025-06-13 22:49:29 +0200 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-06-14 15:45:27 +0200 |
commit | 5b3c52c50b5301d009fb9a0d44b4cf91d50f6de4 (patch) | |
tree | 4814de0d56b7fe84da2ce507d24cfdf8e100f61e /src/Erebos/Network.hs | |
parent | 7fa7cdeb5a8c0c784145df852da8ec4c18cb6e6b (diff) |
Terminate ICE thread when server is stoppedrelease-0.1
Changelog: Improved handling of ICE connections
Diffstat (limited to 'src/Erebos/Network.hs')
-rw-r--r-- | src/Erebos/Network.hs | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/Erebos/Network.hs b/src/Erebos/Network.hs index 32d06f2..ed68ed4 100644 --- a/src/Erebos/Network.hs +++ b/src/Erebos/Network.hs @@ -392,8 +392,21 @@ startServer serverOptions serverOrigHead logd' serverServices = do return server stopServer :: Server -> IO () -stopServer Server {..} = do - mapM_ killThread =<< takeMVar serverThreads +stopServer server@Server {..} = do + withMVar serverPeers $ \peers -> do + ( global, peerStates ) <- atomically $ (,) + <$> takeTMVar serverServiceStates + <*> (forM (M.elems peers) $ \p@Peer {..} -> ( p, ) <$> takeTMVar peerServiceState) + + forM_ global $ \(SomeServiceGlobalState (proxy :: Proxy s) gs) -> do + ps <- forM peerStates $ \( peer, states ) -> + return $ ( peer, ) $ case M.lookup (serviceID proxy) states of + Just (SomeServiceState (_ :: Proxy ps) pstate) + | Just (Refl :: s :~: ps) <- eqT + -> pstate + _ -> emptyServiceState proxy + serviceStopServer proxy server gs ps + mapM_ killThread =<< takeMVar serverThreads dataResponseWorker :: Server -> IO () dataResponseWorker server = forever $ do |