bring back default SIGINT handler
This seems to fix a problem I've recently seen where ctrl-c during rsync
leads to `git annex get` moving on to the next thing rather than exiting.
Seems likely that started happening with the switch to System.Process
(d1da9cf221
), as the old code took care
to install a default SIGINT handler.
Note that since the bug was only occurring sometimes, I am not 100% sure
I've squashed it, although I seem to have.
This commit is contained in:
parent
9770582859
commit
613e747d91
4 changed files with 6 additions and 5 deletions
|
@ -15,6 +15,7 @@ import qualified Control.Exception as E
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import Control.Exception (throw)
|
import Control.Exception (throw)
|
||||||
import System.Console.GetOpt
|
import System.Console.GetOpt
|
||||||
|
import System.Posix.Signals
|
||||||
|
|
||||||
import Common.Annex
|
import Common.Annex
|
||||||
import qualified Annex
|
import qualified Annex
|
||||||
|
@ -108,7 +109,9 @@ tryRun' errnum state cmd (a:as) = do
|
||||||
|
|
||||||
{- Actions to perform each time ran. -}
|
{- Actions to perform each time ran. -}
|
||||||
startup :: Annex Bool
|
startup :: Annex Bool
|
||||||
startup = return True
|
startup = liftIO $ do
|
||||||
|
void $ installHandler sigINT Default Nothing
|
||||||
|
return True
|
||||||
|
|
||||||
{- Cleanup actions. -}
|
{- Cleanup actions. -}
|
||||||
shutdown :: Bool -> Annex Bool
|
shutdown :: Bool -> Annex Bool
|
||||||
|
|
|
@ -53,7 +53,7 @@ rsync = boolSystem "rsync"
|
||||||
- The params must enable rsync's --progress mode for this to work.
|
- The params must enable rsync's --progress mode for this to work.
|
||||||
-}
|
-}
|
||||||
rsyncProgress :: (Integer -> IO ()) -> [CommandParam] -> IO Bool
|
rsyncProgress :: (Integer -> IO ()) -> [CommandParam] -> IO Bool
|
||||||
rsyncProgress callback params = catchBoolIO $
|
rsyncProgress callback params =
|
||||||
withHandle StdoutHandle createProcessSuccess p (feedprogress 0 [])
|
withHandle StdoutHandle createProcessSuccess p (feedprogress 0 [])
|
||||||
where
|
where
|
||||||
p = proc "rsync" (toCommand params)
|
p = proc "rsync" (toCommand params)
|
||||||
|
|
|
@ -49,8 +49,6 @@ boolSystemEnv command params environ = dispatch <$> safeSystemEnv command params
|
||||||
safeSystem :: FilePath -> [CommandParam] -> IO ExitCode
|
safeSystem :: FilePath -> [CommandParam] -> IO ExitCode
|
||||||
safeSystem command params = safeSystemEnv command params Nothing
|
safeSystem command params = safeSystemEnv command params Nothing
|
||||||
|
|
||||||
{- Unlike many implementations of system, SIGINT(ctrl-c) is allowed
|
|
||||||
- to propigate and will terminate the program. -}
|
|
||||||
safeSystemEnv :: FilePath -> [CommandParam] -> Maybe [(String, String)] -> IO ExitCode
|
safeSystemEnv :: FilePath -> [CommandParam] -> Maybe [(String, String)] -> IO ExitCode
|
||||||
safeSystemEnv command params environ = do
|
safeSystemEnv command params environ = do
|
||||||
(_, _, _, pid) <- createProcess (proc command $ toCommand params)
|
(_, _, _, pid) <- createProcess (proc command $ toCommand params)
|
||||||
|
|
|
@ -14,7 +14,7 @@ For example:
|
||||||
Here git-annex exits before rsync has fully exited. Not a large problem
|
Here git-annex exits before rsync has fully exited. Not a large problem
|
||||||
but sorta weird.
|
but sorta weird.
|
||||||
|
|
||||||
The culprit is `safeSystemEnv` in Utility.SafeCommand, which installs
|
The culprit is `CmdLine.startup` in Utility.SafeCommand, which installs
|
||||||
a default signal handler for SIGINT, which causes it to immediatly
|
a default signal handler for SIGINT, which causes it to immediatly
|
||||||
terminate git-annex. rsync, in turn, has its own SIGINT handler, which
|
terminate git-annex. rsync, in turn, has its own SIGINT handler, which
|
||||||
prints the message, typically later.
|
prints the message, typically later.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue