Fix numa001 failure with "too many NUMA nodes"
[ghc.git] / rts / FileLock.c
index 44ff671..f8e11ee 100644 (file)
@@ -5,7 +5,7 @@
  * File locking support as required by Haskell
  *
  * ---------------------------------------------------------------------------*/
+
 #include "PosixSource.h"
 #include "Rts.h"
 
@@ -41,11 +41,12 @@ static int cmpLocks(StgWord w1, StgWord w2)
     return (l1->device == l2->device && l1->inode == l2->inode);
 }
 
-static int hashLock(HashTable *table, StgWord w)
+static int hashLock(const HashTable *table, StgWord w)
 {
     Lock *l = (Lock *)w;
+    StgWord key = l->inode ^ (l->inode >> 32) ^ l->device ^ (l->device >> 32);
     // Just xor all 32-bit words of inode and device, hope this is good enough.
-    return hashWord(table, l->inode ^ (l->inode >> 32) ^ l->device ^ (l->device >> 32));
+    return hashWord(table, key);
 }
 
 void
@@ -120,7 +121,7 @@ unlockFile(int fd)
 
     lock = lookupHashTable(fd_hash, fd);
     if (lock == NULL) {
-        // errorBelch("unlockFile: fd %d not found", fd); 
+        // errorBelch("unlockFile: fd %d not found", fd);
         // This is normal: we didn't know when calling unlockFile
         // whether this FD referred to a locked file or not.
         RELEASE_LOCK(&file_lock_mutex);