From 608d5c78eff618bf54861ee77c69a424eeb6d25c Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 12 May 2015 19:39:28 -0400 Subject: Fix an unlikely race that could result in two transfers of the same key running at once. As discussed in bug report. --- Annex/Transfer.hs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Annex/Transfer.hs') diff --git a/Annex/Transfer.hs b/Annex/Transfer.hs index 1d7f2b98f..14a888620 100644 --- a/Annex/Transfer.hs +++ b/Annex/Transfer.hs @@ -87,9 +87,12 @@ runTransfer' ignorelock t file shouldretry transferobserver transferaction = do r <- tryLockExclusive (Just mode) lck case r of Nothing -> return (Nothing, True) - Just lockhandle -> do + Just lockhandle -> ifM (checkSaneLock lck lockhandle) + ( do void $ tryIO $ writeTransferInfoFile info tfile return (Just lockhandle, False) + , return (Nothing, True) + ) #else prep tfile _mode info = do let lck = transferLockFile tfile -- cgit v1.2.3