Windows: Fix hang when adding several files at once.
This commit is contained in:
parent
e02fdd2270
commit
0e05613083
4 changed files with 35 additions and 17 deletions
|
@ -43,7 +43,7 @@ start restartable cmd params env = do
|
|||
|
||||
start' :: CoProcessSpec -> IO CoProcessState
|
||||
start' s = do
|
||||
(to, from, _err, pid) <- runInteractiveProcess (coProcessCmd s) (coProcessParams s) Nothing (coProcessEnv s)
|
||||
(pid, to, from) <- startInteractiveProcess (coProcessCmd s) (coProcessParams s) (coProcessEnv s)
|
||||
return $ CoProcessState pid to from s
|
||||
|
||||
stop :: CoProcessHandle -> IO ()
|
||||
|
|
|
@ -26,7 +26,7 @@ module Utility.Process (
|
|||
withBothHandles,
|
||||
withQuietOutput,
|
||||
createProcess,
|
||||
runInteractiveProcess,
|
||||
startInteractiveProcess,
|
||||
stdinHandle,
|
||||
stdoutHandle,
|
||||
stderrHandle,
|
||||
|
@ -34,7 +34,7 @@ module Utility.Process (
|
|||
|
||||
import qualified System.Process
|
||||
import System.Process as X hiding (CreateProcess(..), createProcess, runInteractiveProcess, readProcess, readProcessWithExitCode, system, rawSystem, runInteractiveCommand, runProcess)
|
||||
import System.Process hiding (createProcess, runInteractiveProcess, readProcess)
|
||||
import System.Process hiding (createProcess, readProcess)
|
||||
import System.Exit
|
||||
import System.IO
|
||||
import System.Log.Logger
|
||||
|
@ -300,17 +300,19 @@ createProcess p = do
|
|||
debugProcess p
|
||||
System.Process.createProcess p
|
||||
|
||||
runInteractiveProcess
|
||||
:: FilePath
|
||||
-> [String]
|
||||
-> Maybe FilePath
|
||||
-> Maybe [(String, String)]
|
||||
-> IO (Handle, Handle, Handle, ProcessHandle)
|
||||
runInteractiveProcess f args c e = do
|
||||
debugProcess $ (proc f args)
|
||||
{ std_in = CreatePipe
|
||||
, std_out = CreatePipe
|
||||
, std_err = CreatePipe
|
||||
, env = e
|
||||
}
|
||||
System.Process.runInteractiveProcess f args c e
|
||||
{- Starts an interactive process. Unlike runInteractiveProcess in
|
||||
- System.Process, stderr is inherited. -}
|
||||
startInteractiveProcess
|
||||
:: FilePath
|
||||
-> [String]
|
||||
-> Maybe [(String, String)]
|
||||
-> IO (ProcessHandle, Handle, Handle)
|
||||
startInteractiveProcess cmd args environ = do
|
||||
let p = (proc cmd args)
|
||||
{ std_in = CreatePipe
|
||||
, std_out = CreatePipe
|
||||
, std_err = Inherit
|
||||
, env = environ
|
||||
}
|
||||
(Just from, Just to, _, pid) <- createProcess p
|
||||
return (pid, to, from)
|
||||
|
|
1
debian/changelog
vendored
1
debian/changelog
vendored
|
@ -20,6 +20,7 @@ git-annex (4.20130602) UNRELEASED; urgency=low
|
|||
with git annex sync or by the assistant.
|
||||
* Android: Fix use of cp command to not try to use features present
|
||||
only on build system.
|
||||
* Windows: Fix hang when adding several files at once.
|
||||
|
||||
-- Joey Hess <joeyh@debian.org> Mon, 10 Jun 2013 12:52:44 -0400
|
||||
|
||||
|
|
|
@ -180,3 +180,18 @@ info"]
|
|||
|
||||
# End of transcript or log.
|
||||
"""]]
|
||||
|
||||
> Reproduced this, and git update-index was in fact not hanging.
|
||||
> Instead, after that was done, it tried to stop the git hash-object
|
||||
> process, and this hung.
|
||||
>
|
||||
> It seems that the use of runInteractiveProcess is at fault somehow,
|
||||
> and I guess it must be due to it opening a pipe for stderr, which
|
||||
> I don't need or want. Perhaps I need to ensure I read from that pipe,
|
||||
> or windows keeps the process from terminating. (Unix would just toss the piped
|
||||
> data away.)
|
||||
>
|
||||
> That was the only place runInteractiveProcess was used, so I replaced
|
||||
> it with an alternative that lets stderr be inherited. With this change,
|
||||
> I have successfully added 1000 files to the annex in one go, with no
|
||||
> hang. Provisionally [[done]]. --[[Joey]]
|
||||
|
|
Loading…
Add table
Reference in a new issue