[GHC] #8591: Concurrent executions of ghc-pkg can cause inconstant package.cache files

GHC ghc-devs at haskell.org
Tue Nov 18 01:55:37 UTC 2014


#8591: Concurrent executions of ghc-pkg can cause inconstant package.cache files
-------------------------------------+-------------------------------------
              Reporter:  janm        |            Owner:
                  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):

 Replying to [comment:1 thomie]:
 > The comment
 [https://github.com/ghc/ghc/blob/74a6a8a979837d1344fc3236ad6fc4ca76ea49a7/utils
 /ghc-pkg/Main.hs#L1984 "Big fat hairy race condition"] might have
 something to do with this.

 That comment is in the MINGW32 host or target branch of the #if, dealing
 with the case where renameFile can't rename over an existing file on the
 Win32 platform. The real race is depending on renameFile at all, as in the
 #else case of of that #if, as is the case on the platform I'm using,
 FreeBSD.

 The "atomic property" referred to in the comment here is for single-
 process execution, the race I'm talking about is the race between two
 processes to call renameFile.

 A better approach would be for the process to open the targetFile with
 O_EXCL (and create it with O_CREAT if it doesn't exist), and hold it open
 while doing the atomic rename on top of the target. That way the
 targetFile is used a lock to synchronise updates between concurrent
 processes.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8591#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list