projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
further fix for floating point primitives
[ghc-hetmet.git]
/
ghc
/
rts
/
Hash.c
diff --git
a/ghc/rts/Hash.c
b/ghc/rts/Hash.c
index
e1cc0a3
..
ada11a6
100644
(file)
--- a/
ghc/rts/Hash.c
+++ b/
ghc/rts/Hash.c
@@
-1,5
+1,4
@@
/*-----------------------------------------------------------------------------
/*-----------------------------------------------------------------------------
- * $Id: Hash.c,v 1.2 2000/10/06 15:34:29 simonmar Exp $
*
* (c) The AQUA Project, Glasgow University, 1995-1998
* (c) The GHC Team, 1999
*
* (c) The AQUA Project, Glasgow University, 1995-1998
* (c) The GHC Team, 1999
@@
-9,10
+8,14
@@
* pp. 446 -- 457.
* -------------------------------------------------------------------------- */
* pp. 446 -- 457.
* -------------------------------------------------------------------------- */
+#include "PosixSource.h"
#include "Rts.h"
#include "Hash.h"
#include "RtsUtils.h"
#include "Rts.h"
#include "Hash.h"
#include "RtsUtils.h"
+#include <stdlib.h>
+#include <string.h>
+
#define HSEGSIZE 1024 /* Size of a single hash table segment */
/* Also the minimum size of a hash table */
#define HDIRSIZE 1024 /* Size of the segment directory */
#define HSEGSIZE 1024 /* Size of a single hash table segment */
/* Also the minimum size of a hash table */
#define HDIRSIZE 1024 /* Size of the segment directory */
@@
-242,9
+245,10
@@
insertHashTable(HashTable *table, StgWord key, void *data)
int index;
HashList *hl;
int index;
HashList *hl;
- /* We want no duplicates */
- ASSERT(lookupHashTable(table, key) == NULL);
-
+ // Disable this assert; sometimes it's useful to be able to
+ // overwrite entries in the hash table.
+ // ASSERT(lookupHashTable(table, key) == NULL);
+
/* When the average load gets too high, we expand the table */
if (++table->kcount >= HLOAD * table->bcount)
expand(table);
/* When the average load gets too high, we expand the table */
if (++table->kcount >= HLOAD * table->bcount)
expand(table);
@@
-281,6
+285,7
@@
removeHashTable(HashTable *table, StgWord key, void *data)
table->dir[segment][index] = hl->next;
else
prev->next = hl->next;
table->dir[segment][index] = hl->next;
else
prev->next = hl->next;
+ freeHashList(hl);
table->kcount--;
return hl->data;
}
table->kcount--;
return hl->data;
}
@@
-320,11
+325,11
@@
freeHashTable(HashTable *table, void (*freeDataFun)(void *) )
}
index--;
}
}
index--;
}
- free(table->dir[segment]);
+ stgFree(table->dir[segment]);
segment--;
index = HSEGSIZE - 1;
}
segment--;
index = HSEGSIZE - 1;
}
- free(table);
+ stgFree(table);
}
/* -----------------------------------------------------------------------------
}
/* -----------------------------------------------------------------------------