summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorUlrik de Muelenaere <ulrikdem@gmail.com>2024-03-30 10:42:03 -0400
committerUlrik de Muelenaere <ulrikdem@gmail.com>2024-03-30 10:42:03 -0400
commit9349871b9eb888d1d1b7f552ea40f8d348b16c1b (patch)
tree4fc1ada0d16328c18b01cea129488d43946e8c2d
parent8ed665cc20568e877b5400944dbfa752833971bc (diff)
downloadxmobar-9349871b9eb888d1d1b7f552ea40f8d348b16c1b.tar.gz
xmobar-9349871b9eb888d1d1b7f552ea40f8d348b16c1b.tar.bz2
Fix zombie processes left by <action> tag and low battery action
This effectively reverts c54d93e and 991a168. While those fix #687 and #688 respectively in the case where the configuration is recompiled, in all other cases they leave zombie processes, since they undo the fix for #181. However, instead of reverting to the deprecated system function, we use the newer spawnCommand and waitForProcess. And like with 991a168, the low battery action now runs in the background to avoid blocking the bar.
-rw-r--r--changelog.md1
-rw-r--r--src/Xmobar/Plugins/Monitors/Batt/Common.hs4
-rw-r--r--src/Xmobar/Run/Actions.hs6
3 files changed, 6 insertions, 5 deletions
diff --git a/changelog.md b/changelog.md
index 74912c6..6410188 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,6 +1,7 @@
## Version 0.48 (unreleased)
- The `Kbd` monitor is not clickable (thanks, Enrico Maria)
+- Fix zombie processes left by `<action>` tag and low battery action
## Version 0.47.4 (March, 2024)
diff --git a/src/Xmobar/Plugins/Monitors/Batt/Common.hs b/src/Xmobar/Plugins/Monitors/Batt/Common.hs
index a07ba8b..ddb2b8c 100644
--- a/src/Xmobar/Plugins/Monitors/Batt/Common.hs
+++ b/src/Xmobar/Plugins/Monitors/Batt/Common.hs
@@ -18,7 +18,7 @@ module Xmobar.Plugins.Monitors.Batt.Common (BattOpts(..)
, Status(..)
, maybeAlert) where
-import System.Process (spawnCommand)
+import System.Process (spawnCommand, waitForProcess)
import Control.Monad (unless, void)
import Xmobar.Plugins.Monitors.Common
@@ -54,4 +54,4 @@ maybeAlert opts left =
case onLowAction opts of
Nothing -> return ()
Just x -> unless (isNaN left || actionThreshold opts < 100 * left)
- $ void $ spawnCommand x
+ $ void $ spawnCommand (x ++ " &") >>= waitForProcess
diff --git a/src/Xmobar/Run/Actions.hs b/src/Xmobar/Run/Actions.hs
index 51dbb85..cbc10c5 100644
--- a/src/Xmobar/Run/Actions.hs
+++ b/src/Xmobar/Run/Actions.hs
@@ -16,7 +16,7 @@ module Xmobar.Run.Actions ( Button
, runAction'
, stripActions) where
-import System.Process (spawnCommand)
+import System.Process (spawnCommand, waitForProcess)
import Control.Monad (void)
import Text.Regex (Regex, subRegex, mkRegex, matchRegex)
import Data.Word (Word32)
@@ -26,11 +26,11 @@ type Button = Word32
data Action = Spawn [Button] String deriving (Eq, Read, Show)
runAction :: Action -> IO ()
-runAction (Spawn _ s) = void $ spawnCommand s
+runAction (Spawn _ s) = void $ spawnCommand (s ++ " &") >>= waitForProcess
-- | Run action with stdout redirected to stderr
runAction' :: Action -> IO ()
-runAction' (Spawn _ s) = void $ spawnCommand (s ++ " 1>&2")
+runAction' (Spawn _ s) = void $ spawnCommand (s ++ " 1>&2 &") >>= waitForProcess
stripActions :: String -> String
stripActions s = case matchRegex actionRegex s of