redis-0.1: Database/Redis/Utils/Monad/Lock.hs
-- | Same as "Database.Redis.Utils.Lock" but with monadic wrapped
module Database.Redis.Utils.Monad.Lock (acquire, acquire', acquireOnce, release) where
import Control.Monad.Trans
import qualified Database.Redis.Utils.Lock as L
import Database.Redis.Monad (WithRedis(..))
{-
timeout - сколько пытаться захватить лок, ms
retry_timeout - сколько ждать между попытками, ms
-}
acquire :: WithRedis m => String -> Int -> Int -> m Bool
acquire name timeout retry_timeout =
do r <- getRedis
liftIO $ L.acquire r name timeout retry_timeout
acquire' name timeout = acquire name timeout 1
acquireOnce name = getRedis >>= liftIO . flip L.acquireOnce name
release :: WithRedis m => String -> m ()
release name = getRedis >>= liftIO . flip L.release name