From b36cf634ad5c075d6b1e73880433711a6786773c Mon Sep 17 00:00:00 2001
From: Amir Saeid <amir@glgdgt.com>
Date: Tue, 6 Jul 2021 21:40:02 +0100
Subject: Replace forkIO with bracket & Concurrent.Async

---
 src/Xmobar/Plugins/Kraken.hs | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

(limited to 'src/Xmobar')

diff --git a/src/Xmobar/Plugins/Kraken.hs b/src/Xmobar/Plugins/Kraken.hs
index 4a15199..8f2e1cc 100644
--- a/src/Xmobar/Plugins/Kraken.hs
+++ b/src/Xmobar/Plugins/Kraken.hs
@@ -3,8 +3,9 @@
 
 module Xmobar.Plugins.Kraken (Kraken(..)) where
 
-import Control.Concurrent
-import Control.Exception (catch)
+import Control.Concurrent (MVar, newEmptyMVar, putMVar, takeMVar)
+import Control.Concurrent.Async (async, cancel)
+import Control.Exception (bracket, catch)
 import Control.Monad (forever, mzero, void, when)
 import Data.Aeson
 import Data.Aeson.Types (Parser, typeMismatch)
@@ -28,14 +29,14 @@ instance Exec Kraken where
   alias (Kraken _ a) = a
   start (Kraken ps _) cb = do
     mvar <- newEmptyMVar 
-    forkIO $ reconnectOnConnectionClose $ wsClientApp ps mvar
-    let loop mv p = do
-         v <- takeMVar mv
-         let g = Map.insert (unpack $ fst v) (snd v) p
-         cb (display g)
-         loop mv g
-
-    loop mvar (Map.fromList $ zip ps (repeat 0.0))
+    bracket (async $ reconnectOnConnectionClose $ wsClientApp ps mvar) cancel $ \_ -> do
+      let loop mv p = do
+           v <- takeMVar mv
+           let g = Map.insert (unpack $ fst v) (snd v) p
+           cb (display g)
+           loop mv g
+
+      loop mvar (Map.fromList $ zip ps (repeat 0.0))
 
     where
       display :: Map.Map String Double -> String 
-- 
cgit v1.2.3