• Simon Marlow's avatar
    Move file locking into the RTS, fixing #629, #1109 · 1d026619
    Simon Marlow authored
    File locking (of the Haskell 98 variety) was previously done using a
    static table with linear search, which had two problems: the array had
    a fixed size and was sometimes too small (#1109), and performance of
    lockFile/unlockFile was suboptimal due to the linear search.
    Also the algorithm failed to count readers as required by Haskell 98
    (#629).
    
    Now it's done using a hash table (provided by the RTS).  Furthermore I
    avoided the extra fstat() for every open file by passing the dev_t and
    ino_t into lockFile.  This and the improvements to the locking
    algorithm result in a healthy 20% or so performance increase for
    opening/closing files (see openFile008 test).
    1d026619
Hash.c 9.8 KB