[GHC] #8591: Concurrent executions of ghc-pkg can cause inconstant package.cache files
GHC
ghc-devs at haskell.org
Thu Nov 20 01:39:36 UTC 2014
#8591: Concurrent executions of ghc-pkg can cause inconstant package.cache files
-------------------------------------+-------------------------------------
Reporter: janm | Owner: pgj
Type: bug | Status: new
Priority: normal | Milestone:
Component: Package | Version: 7.6.3
system | Keywords: ghc-pkg race
Resolution: | Architecture: Unknown/Multiple
Operating System: FreeBSD | Difficulty: Unknown
Type of failure: Other | Blocked By:
Test Case: | Related Tickets:
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
Comment (by janm):
I am running a test build now but code inspection shows that the same
race is present. I expect it to fail.
We resolved the issue by single-threading all package installation in the
build process. We are running on 9.3-p5 at the moment -- It was probably
9.2-RELEASE or 9-STABLE at the time of the original bug report.
I also see that the FreeBSD port for lang/ghc limits concurrency to 4
jobs, added in SVN rev 348842. Assuming you're also pgj at freebsd you
committed the change, so probably know! This was in response to FreeBSD
bug ports/186829 (see
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=186829 ).
The same problem seems to be the underlying cause. The error trace in the
bug report shows cabal failing to install a package, just like I saw in my
system build processes. Resolving the problem in ghc-pkg should resolve
this problem and allow lang/ghc builds to run with full parallelism.
In principle, the withFileAtomic function should (in order):
1. take a lock on the target file (creating it if it is not present)
2. create the temporary file
3. write to the temporary file
4. close the temporary file
5. rename the temporary file on top of the locked target file
6. close the original target file which is now no longer present in the
file system.
Concurrent execution will now be serialised around the lock on the target
file.
This doesn't resolve the "big hairy race condition" on Windows, but it
should resolve the big hairy race condition I'm hitting that isn't
mentioned code comments.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8591#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list