diff options
author | Joey Hess <joey@kitenet.net> | 2014-08-20 11:25:07 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2014-08-20 11:37:02 -0400 |
commit | b44e74ace2d74954c503930b9edb75d0aa9d7b52 (patch) | |
tree | f07fa949063d3e93987dad89e3348e6d8b692b76 /Annex/Content.hs | |
parent | 5fda2e3cb3f93771fb70a3ccbf88eeaf4e7f924a (diff) |
Ensure that all lock fds are close-on-exec, fixing various problems with them being inherited by child processes such as git commands.
(With the exception of daemon pid locking.)
This fixes at part of #758630. I reproduced the assistant locking eg, a
removable drive's annex journal lock file and forking a long-running
git-cat-file process that inherited that lock.
This did not affect Windows.
Considered doing a portable Utility.LockFile layer, but git-annex uses
posix locks in several special ways that have no direct Windows equivilant,
and it seems like it would mostly be a complication.
This commit was sponsored by Protonet.
Diffstat (limited to 'Annex/Content.hs')
-rw-r--r-- | Annex/Content.hs | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/Annex/Content.hs b/Annex/Content.hs index b51e15827..2a05c2dac 100644 --- a/Annex/Content.hs +++ b/Annex/Content.hs @@ -192,7 +192,9 @@ lockContent key a = do v <- tryIO $ setLock fd (WriteLock, AbsoluteSeek, 0, 0) case v of Left _ -> alreadylocked - Right _ -> return $ Just fd + Right _ -> do + setFdOption fd CloseOnExec True + return $ Just fd unlock mlockfile mfd = do maybe noop cleanuplockfile mlockfile liftIO $ maybe noop closeFd mfd |