----------------------------------------------------------------------------- -- | -- Module : Control.Concurrent.AdvSTM.TVar -- Copyright : (c) Peter Robinson 2009 -- License : BSD-style (see the file LICENSE) -- -- Maintainer : Peter Robinson -- Stability : experimental -- Portability : non-portable (requires STM) -- -- -- ----------------------------------------------------------------------------- module Control.Concurrent.AdvSTM.TVar( TVar ) {- ( -- * TVars TVar , newTVar , newTVarIO , readTVar , writeTVar ) -} where import qualified Control.Concurrent.STM.TVar as OldTVar import qualified Control.Concurrent.STM as STM import qualified Control.Concurrent.STM.TMVar as OldTMVar import qualified Control.Concurrent.STM.TChan as OldTChan import Control.Exception(throw,Deadlock(Deadlock)) -- import Control.Concurrent.AdvSTM(liftAdv,orElse,retry) -- import Control.Monad.AdvSTM.Def(AdvSTM(AdvSTM),transThreadId,listeners,TVarValue(TVarValue)) import Control.Concurrent(ThreadId) import Control.Monad(liftM,ap,unless) import Control.Monad.Reader(asks) import Data.Maybe(isJust,Maybe,fromJust) import qualified Data.Set as S -------------------------------------------------------------------------------- data TVar a = TVar { valueTVar :: OldTVar.TVar a , onCommitLock :: OldTMVar.TMVar () , currentTid :: OldTVar.TVar (Maybe ThreadId) }