v6: fix locking modified file when the content is not present
This commit is contained in:
parent
2d343224dc
commit
6b717032c5
1 changed files with 4 additions and 3 deletions
|
@ -65,15 +65,16 @@ performNew file key filemodified = do
|
||||||
next $ cleanupNew file key
|
next $ cleanupNew file key
|
||||||
where
|
where
|
||||||
lockdown obj = do
|
lockdown obj = do
|
||||||
ifM (sameInodeCache obj =<< Database.Keys.getInodeCaches key)
|
ifM (catchBoolIO $ sameInodeCache obj =<< Database.Keys.getInodeCaches key)
|
||||||
( breakhardlink obj
|
( breakhardlink obj
|
||||||
, repopulate obj
|
, repopulate obj
|
||||||
)
|
)
|
||||||
freezeContent obj
|
whenM (liftIO $ doesFileExist obj) $
|
||||||
|
freezeContent obj
|
||||||
|
|
||||||
-- It's ok if the file is hard linked to obj, but if some other
|
-- It's ok if the file is hard linked to obj, but if some other
|
||||||
-- associated file is, we need to break that link to lock down obj.
|
-- associated file is, we need to break that link to lock down obj.
|
||||||
breakhardlink obj = whenM ((> 1) . linkCount <$> liftIO (getFileStatus obj)) $ do
|
breakhardlink obj = whenM (catchBoolIO $ (> 1) . linkCount <$> liftIO (getFileStatus obj)) $ do
|
||||||
mfc <- withTSDelta (liftIO . genInodeCache file)
|
mfc <- withTSDelta (liftIO . genInodeCache file)
|
||||||
unlessM (sameInodeCache obj (maybeToList mfc)) $ do
|
unlessM (sameInodeCache obj (maybeToList mfc)) $ do
|
||||||
modifyContent obj $ replaceFile obj $ \tmp -> do
|
modifyContent obj $ replaceFile obj $ \tmp -> do
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue