summaryrefslogtreecommitdiffhomepage
path: root/src/Xmobar/System
diff options
context:
space:
mode:
authorTomas Janousek <tomi@nomi.cz>2020-11-14 12:25:58 +0000
committerjao <jao@gnu.org>2020-11-19 13:38:15 +0000
commitb23fc95a3bc2c0fefba7a44d6f1a4e8e0941d77c (patch)
tree2a0aa316ea0c39f8749cd81a55fb51ed5647001f /src/Xmobar/System
parente2d88d6de8447de2e8a7d3573fe4c33e6f01ee60 (diff)
downloadxmobar-b23fc95a3bc2c0fefba7a44d6f1a4e8e0941d77c.tar.gz
xmobar-b23fc95a3bc2c0fefba7a44d6f1a4e8e0941d77c.tar.bz2
StdinReader: Improve exception handling
This corrects a misleading comment "EOF check is necessary for certain systems" which was added without complete understanding of the root cause of #442. That issue was in fact caused by old xmobars not being terminated on early EOF, and is thus necessary on _all_ systems that rely on EOF to terminate old xmobar before starting a new one. (To trigger the bug, one additionally needs to close the xmobar pipe before sending any input to it, which is unusual, but incorrectly configured xmonad might trigger that.) Furthermore, this fixes another execution path that could lead to xmobar not being terminated on EOF: `echo -e '\xff' | xmobar -c '[Run StdinReader]' -t '%StdinReader%'` would terminate the StdinReader thread upon catching the "invalid argument (invalid byte sequence)" so there'd be no thread to detect the subsequent EOF and xmobar would get stuck. Additionally, I believe that terminating either the thread or the entire xmobar upon receiving a single miscoded byte isn't desirable, as this might be an intermittent issue and another input line can be perfectly okay. Therefore I suggest that the original issue @psibi was trying to fix by b7a3d6745817 is worked around by introducing a throttling delay instead of terminating the thread, as I assume that exceptions other than async and EOF are recoverable. Fixes: b7a3d6745817 ("Avoid busy looping by not catching all exceptions") Fixes: 68ac4d3ae6f3 ("Update stderr and the bar on receiving exception") Fixes: ed0663aac942 ("Add EOF check before getLine operation from stdin") Fixes: https://github.com/jaor/xmobar/issues/442 Related: https://github.com/jaor/xmobar/pull/439 Related: https://github.com/jaor/xmobar/pull/448
Diffstat (limited to 'src/Xmobar/System')
-rw-r--r--src/Xmobar/System/Utils.hs11
1 files changed, 0 insertions, 11 deletions
diff --git a/src/Xmobar/System/Utils.hs b/src/Xmobar/System/Utils.hs
index 53052ea..24c655e 100644
--- a/src/Xmobar/System/Utils.hs
+++ b/src/Xmobar/System/Utils.hs
@@ -20,7 +20,6 @@
module Xmobar.System.Utils
( expandHome
, changeLoop
- , onSomeException
, safeIndex
) where
@@ -31,7 +30,6 @@ import Data.Maybe (fromMaybe)
import System.Environment
import System.FilePath
-import Control.Exception
expandHome :: FilePath -> IO FilePath
expandHome ('~':'/':path) = fmap (</> path) (getEnv "HOME")
@@ -47,15 +45,6 @@ changeLoop s f = atomically s >>= go
guard (new /= old)
return new)
--- | Like 'finally', but only performs the final action if there was an
--- exception raised by the computation.
---
--- Note that this implementation is a slight modification of
--- onException function.
-onSomeException :: IO a -> (SomeException -> IO b) -> IO a
-onSomeException io what = io `catch` \e -> do _ <- what e
- throwIO (e :: SomeException)
-
(!!?) :: [a] -> Int -> Maybe a
(!!?) xs i
| i < 0 = Nothing