quic 0.2.16 → 0.2.17
raw patch · 3 files changed
+23/−15 lines, 3 files
Files
- ChangeLog.md +5/−1
- Network/QUIC/Server/Reader.hs +17/−13
- quic.cabal +1/−1
ChangeLog.md view
@@ -1,6 +1,10 @@ # ChangeLog -## 0.2.15+## 0.2.17++* Using waitReadSocketSTM properly.++## 0.2.16 * Fixing build on Windows. [#80](https://github.com/kazu-yamamoto/quic/pull/80)
Network/QUIC/Server/Reader.hs view
@@ -147,15 +147,20 @@ data ServerState = Running | Stopped deriving (Eq, Show) -checkLoop :: TVar ServerState -> STM () -> IO Bool-checkLoop stvar waitsock = atomically $ do- st <- readTVar stvar- if st == Stopped- then- return False+checkLoop :: TVar ServerState -> Socket -> IO Bool+checkLoop stvar mysock = do+ st0 <- readTVarIO stvar+ if st0 == Stopped+ then return False else do- waitsock -- blocking is retry- return True+ wait <- waitReadSocketSTM mysock+ atomically $ do+ st <- readTVar stvar+ if st == Stopped+ then return False+ else do+ wait -- blocking is retry+ return True dispatcher :: Dispatch@@ -166,11 +171,10 @@ -> IO () dispatcher d conf stvar forkConnection mysock = do labelMe "QUIC dispatcher"- wait <- waitReadSocketSTM mysock- handleLogUnit logAction $ loop wait+ handleLogUnit logAction loop where- loop wait = do- cont <- checkLoop stvar wait+ loop = do+ cont <- checkLoop stvar mysock when cont $ do (bs, peersa) <- safeRecv $ NSB.recvFrom mysock 2048 now <- getTimeMicrosecond@@ -181,7 +185,7 @@ let bytes = BS.length bs switch = dispatch d conf forkConnection logAction mysock peersa send' bytes now mapM_ switch cpckts- loop wait+ loop doDebug = isJust $ scDebugLog conf logAction msg
quic.cabal view
@@ -1,6 +1,6 @@ cabal-version: >=1.10 name: quic-version: 0.2.16+version: 0.2.17 license: BSD3 license-file: LICENSE maintainer: kazu@iij.ad.jp