Skip to content
Snippets Groups Projects
Commit dc6ce1cf authored by Jens Nolte's avatar Jens Nolte
Browse files

Use MonadResourceManager in more places

parent 65a6a308
No related branches found
No related tags found
No related merge requests found
...@@ -283,10 +283,10 @@ withResourceManager = bracket unsafeNewResourceManager (await <=< liftIO . dispo ...@@ -283,10 +283,10 @@ withResourceManager = bracket unsafeNewResourceManager (await <=< liftIO . dispo
withOnResourceManager :: (MonadAwait m, MonadMask m, MonadIO m) => (ReaderT ResourceManager m a) -> m a withOnResourceManager :: (MonadAwait m, MonadMask m, MonadIO m) => (ReaderT ResourceManager m a) -> m a
withOnResourceManager action = withResourceManager \resourceManager -> onResourceManager resourceManager action withOnResourceManager action = withResourceManager \resourceManager -> onResourceManager resourceManager action
newResourceManager :: MonadIO m => ResourceManager -> m ResourceManager newResourceManager :: MonadResourceManager m => m ResourceManager
newResourceManager parent = liftIO $ mask_ do newResourceManager = mask_ do
resourceManager <- unsafeNewResourceManager resourceManager <- unsafeNewResourceManager
attachDisposable parent resourceManager registerDisposable resourceManager
pure resourceManager pure resourceManager
unsafeNewResourceManager :: MonadIO m => m ResourceManager unsafeNewResourceManager :: MonadIO m => m ResourceManager
......
...@@ -75,28 +75,27 @@ data TimerSchedulerDisposed = TimerSchedulerDisposed ...@@ -75,28 +75,27 @@ data TimerSchedulerDisposed = TimerSchedulerDisposed
instance Exception TimerSchedulerDisposed instance Exception TimerSchedulerDisposed
newTimerScheduler :: ResourceManager -> IO TimerScheduler newTimerScheduler :: MonadResourceManager m => m TimerScheduler
newTimerScheduler parentResourceManager = do newTimerScheduler = do
heap <- newTVarIO empty resourceManager <- newResourceManager
activeCount <- newTVarIO 0 liftIO do
cancelledCount <- newTVarIO 0 heap <- newTVarIO empty
resourceManager <- newResourceManager parentResourceManager activeCount <- newTVarIO 0
let scheduler = TimerScheduler { cancelledCount <- newTVarIO 0
heap, let scheduler = TimerScheduler {
activeCount, heap,
cancelledCount, activeCount,
resourceManager cancelledCount,
} resourceManager
startSchedulerThread scheduler }
pure scheduler startSchedulerThread scheduler
pure scheduler
startSchedulerThread :: TimerScheduler -> IO () startSchedulerThread :: TimerScheduler -> IO ()
startSchedulerThread scheduler = do startSchedulerThread scheduler = do
mask_ do mask_ do
threadId <- forkIOWithUnmask ($ schedulerThread) onResourceManager (resourceManager scheduler) do
attachDisposeAction_ (resourceManager scheduler) do registerDisposable =<< forkTask schedulerThread
throwTo threadId TimerSchedulerDisposed
pure $ pure ()
where where
resourceManager' :: ResourceManager resourceManager' :: ResourceManager
resourceManager' = resourceManager scheduler resourceManager' = resourceManager scheduler
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment