move ugly rsync zombie workaround

This reaping of any processes came to cause me problems when redoing the
rsync special remote -- a gpg process that was running gets waited on and
the place that then checks its return code fails.

I cannot reproduce any zombies when using the rsync special remote.
But I still can when using a normal git remote, accessed over ssh.
There is 1 zombie per file downloaded without this horrible hack enabled.

So, move the hack to only be used in that case.
This commit is contained in:
Joey Hess 2014-08-03 16:35:35 -04:00
parent b3fe23b552
commit 6c450aad1d
2 changed files with 10 additions and 9 deletions

View file

@ -102,13 +102,20 @@ dropKey r key = onRemote r (boolSystem, False) "dropkey"
rsyncHelper :: Maybe MeterUpdate -> [CommandParam] -> Annex Bool rsyncHelper :: Maybe MeterUpdate -> [CommandParam] -> Annex Bool
rsyncHelper callback params = do rsyncHelper callback params = do
showOutput -- make way for progress bar showOutput -- make way for progress bar
ifM (liftIO $ (maybe rsync rsyncProgress callback) params) ok <- ifM (liftIO $ (maybe rsync rsyncProgress callback) params)
( return True ( return True
, do , do
showLongNote "rsync failed -- run git annex again to resume file transfer" showLongNote "rsync failed -- run git annex again to resume file transfer"
return False return False
) )
{- For an unknown reason, this causes rsync to run a second
- ssh process, which it neglects to wait on.
- Reap the resulting zombie. -}
liftIO reapZombies
return ok
{- Generates rsync parameters that ssh to the remote and asks it {- Generates rsync parameters that ssh to the remote and asks it
- to either receive or send the key's content. -} - to either receive or send the key's content. -}
rsyncParamsRemote :: Bool -> Remote -> Direction -> Key -> FilePath -> AssociatedFile -> Annex [CommandParam] rsyncParamsRemote :: Bool -> Remote -> Direction -> Key -> FilePath -> AssociatedFile -> Annex [CommandParam]

View file

@ -66,14 +66,8 @@ rsyncParamsFixup = map fixup
- 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 :: MeterUpdate -> [CommandParam] -> IO Bool rsyncProgress :: MeterUpdate -> [CommandParam] -> IO Bool
rsyncProgress meterupdate params = do rsyncProgress meterupdate params = catchBoolIO $
r <- catchBoolIO $ withHandle StdoutHandle createProcessSuccess p (feedprogress 0 [])
withHandle StdoutHandle createProcessSuccess p (feedprogress 0 [])
{- For an unknown reason, piping rsync's output like this does
- causes it to run a second ssh process, which it neglects to wait
- on. Reap the resulting zombie. -}
reapZombies
return r
where where
p = proc "rsync" (toCommand $ rsyncParamsFixup params) p = proc "rsync" (toCommand $ rsyncParamsFixup params)
feedprogress prev buf h = do feedprogress prev buf h = do