mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-27 07:56:14 +01:00
ghash: Disable small-arrays under valgrind
Valgrind can't find 64bit pointers when we pack them into an array of 32bit values. Disable this optimisation if we detect that we are running under valgrind. Fixes #1749
This commit is contained in:
parent
ebd2116d89
commit
436ca1f376
22
glib/ghash.c
22
glib/ghash.c
@ -38,6 +38,7 @@
|
||||
#include "gtestutils.h"
|
||||
#include "gslice.h"
|
||||
#include "grefcount.h"
|
||||
#include "gvalgrind.h"
|
||||
|
||||
/* The following #pragma is here so we can do this...
|
||||
*
|
||||
@ -1016,6 +1017,7 @@ g_hash_table_new_full (GHashFunc hash_func,
|
||||
GDestroyNotify value_destroy_func)
|
||||
{
|
||||
GHashTable *hash_table;
|
||||
gboolean small;
|
||||
|
||||
hash_table = g_slice_new (GHashTable);
|
||||
g_hash_table_set_shift (hash_table, HASH_TABLE_MIN_SHIFT);
|
||||
@ -1033,14 +1035,24 @@ g_hash_table_new_full (GHashFunc hash_func,
|
||||
hash_table->values = hash_table->keys;
|
||||
hash_table->hashes = g_new0 (guint, hash_table->size);
|
||||
|
||||
/* We want to use small arrays only if:
|
||||
* - we are running on a system where that makes sense (64 bit); and
|
||||
* - we are not running under valgrind.
|
||||
*/
|
||||
small = FALSE;
|
||||
|
||||
#ifdef USE_SMALL_ARRAYS
|
||||
hash_table->have_big_keys = FALSE;
|
||||
hash_table->have_big_values = FALSE;
|
||||
#else
|
||||
hash_table->have_big_keys = TRUE;
|
||||
hash_table->have_big_values = TRUE;
|
||||
small = TRUE;
|
||||
|
||||
# ifdef ENABLE_VALGRIND
|
||||
if (RUNNING_ON_VALGRIND)
|
||||
small = FALSE;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
hash_table->have_big_keys = !small;
|
||||
hash_table->have_big_values = !small;
|
||||
|
||||
return hash_table;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user