From f1c85ac11b3b7004bf1b1917f9c504622d15e1aa Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 26 Sep 2022 15:26:29 -0400 Subject: [PATCH] fix breakage in wormhole's sendFile Commit ff0927bde98e7b7fd4a7ef49b61b8770c6df294d 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 --- Utility/MagicWormhole.hs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Utility/MagicWormhole.hs b/Utility/MagicWormhole.hs index a4128d1d5c..8aa950ef7d 100644 --- a/Utility/MagicWormhole.hs +++ b/Utility/MagicWormhole.hs @@ -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. -- 2.30.2