fix breakage in wormhole's sendFile

Commit ff0927bde9 broke this, it made it
try to read all of the input before looking for the code. But, wormhole
keeps running until it sends the file, so that caused a deadlock. Oops.

Sponsored-by: Luke Shumaker on Patreon
This commit is contained in:
Joey Hess 2022-09-26 15:26:29 -04:00
parent 17129fed66
commit f1c85ac11b
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38

View file

@ -120,16 +120,21 @@ sendFile f (CodeObserver observer) ps = do
return (inout || inerr)
where
p = wormHoleProcess (ps ++ [Param "send", File f])
findcode ph h = findcode' =<< getwords ph h []
findcode ph h = hGetLineUntilExitOrEOF ph h >>= \case
Nothing -> return False
Just l -> ifM (findcode' (words l))
( drain ph h >> return True
, findcode ph h
)
findcode' [] = return False
findcode' (w:ws) = case mkCode w of
Just code -> do
_ <- tryPutMVar observer code
return True
Nothing -> findcode' ws
getwords ph h c = hGetLineUntilExitOrEOF ph h >>= \case
Nothing -> return $ concatMap words $ reverse c
Just l -> getwords ph h (l:c)
drain ph h = hGetLineUntilExitOrEOF ph h >>= \case
Just _ -> drain ph h
Nothing -> return ()
-- | Receives a file. Once the receive is under way, the Code will be
-- read from the CodeProducer, and fed to wormhole on stdin.