@@ -882,8 +882,8 @@ testCrossing :: Transport -> Int -> IO ()
882882testCrossing transport numRepeats = do
883883 [aAddr, bAddr] <- replicateM 2 newEmptyMVar
884884 [aDone, bDone] <- replicateM 2 newEmptyMVar
885+ [aGo, bGo] <- replicateM 2 newEmptyMVar
885886 [aTimeout, bTimeout] <- replicateM 2 newEmptyMVar
886− go <- newEmptyMVar
887887
888888 let hints = defaultConnectHints {
889889 connectTimeout = Just 5000000
@@ -896,7 +896,7 @@ testCrossing transport numRepeats = do
896896 theirAddress <- readMVar bAddr
897897
898898 replicateM_ numRepeats $ do
899− takeMVar go >> yield
899+ takeMVar aGo >> yield
900900 -- Because we are creating lots of connections, it's possible that
901901 -- connect times out (for instance, in the TCP transport,
902902 -- Network.Socket.connect may time out). We shouldn't regard this as an
@@ -914,9 +914,9 @@ testCrossing transport numRepeats = do
914914 Right endpoint <- newEndPoint transport
915915 putMVar bAddr (address endpoint)
916916 theirAddress <- readMVar aAddr
917−
917+
918918 replicateM_ numRepeats $ do
919− takeMVar go >> yield
919+ takeMVar bGo >> yield
920920 connectResult <- connect endpoint theirAddress ReliableOrdered hints
921921 case connectResult of
922922 Right conn -> close conn
@@ -930,8 +930,10 @@ testCrossing transport numRepeats = do
930930 -- putStrLn $ "Round " ++ show _i
931931 tryTakeMVar aTimeout
932932 tryTakeMVar bTimeout
933− putMVar go ()
934− putMVar go ()
933+ b <- randomIO
934+ if b then do putMVar aGo () ; putMVar bGo ()
935+ else do putMVar bGo () ; putMVar aGo ()
936+ yield
935937 takeMVar aDone
936938 takeMVar bDone
937939