@@ -53,7 +53,6 @@ module Streamly.SVar
53 , captureMonadState
53 , captureMonadState
54 , RunInIO (..)
54 , RunInIO (..)
56− , atomicModifyIORefCAS
57 , WorkerInfo (..)
56 , WorkerInfo (..)
58 , YieldRateInfo (..)
57 , YieldRateInfo (..)
59 , ThreadAbort (..)
58 , ThreadAbort (..)
@@ -116,9 +115,9 @@ import Control.Monad (when)
116import Control.Monad.Catch (MonadThrow)
115import Control.Monad.Catch (MonadThrow)
117import Control.Monad.IO.Class (MonadIO(..))
116import Control.Monad.IO.Class (MonadIO(..))
118import Control.Monad.Trans.Control (MonadBaseControl, control, StM)
117import Control.Monad.Trans.Control (MonadBaseControl, control, StM)
119−import Data.Atomics
118+import Streamly.Atomics
120− (casIORef, readForCAS, peekTicket, atomicModifyIORefCAS_,
119+ (atomicModifyIORefCAS, atomicModifyIORefCAS_, writeBarrier,
121− writeBarrier, storeLoadBarrier)
120+ storeLoadBarrier)
122import Data.Concurrent.Queue.MichaelScott (LinkedQueue, pushL)
121import Data.Concurrent.Queue.MichaelScott (LinkedQueue, pushL)
123import Data.Functor (void)
122import Data.Functor (void)
124import Data.Heap (Heap, Entry(..))
123import Data.Heap (Heap, Entry(..))
@@ -730,25 +729,6 @@ withDiagMVar sv label action =
731-------------------------------------------------------------------------------
730-------------------------------------------------------------------------------
733−-- Slightly faster version of CAS. Gained some improvement by avoiding the use
734−-- of "evaluate" because we know we do not have exceptions in fn.
735−{-# INLINE atomicModifyIORefCAS #-}
736−atomicModifyIORefCAS :: IORef a -> (a -> (a,b)) -> IO b
737−atomicModifyIORefCAS ref fn = do
738− tkt <- readForCAS ref
744− loop _ 0 = atomicModifyIORef ref fn
746− let (new, result) = fn $ peekTicket old
747− (success, tkt) <- casIORef ref old new
750− else loop tkt (tries - 1)
752{-# INLINE ringDoorBell #-}
732{-# INLINE ringDoorBell #-}
753ringDoorBell :: SVar t m a -> IO ()
733ringDoorBell :: SVar t m a -> IO ()
754ringDoorBell sv = do
734ringDoorBell sv = do