From: Matthias Clasen Date: Wed, 27 Apr 2011 04:03:59 +0000 (-0400) Subject: GHashTable: Small optimization of remove-all X-Git-Tag: 2.29.4~42^2~13 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d3b80c49ea257d02838099e05e315a2407e664b9;p=platform%2Fupstream%2Fglib.git GHashTable: Small optimization of remove-all Don't enter the loop if we are not going to notify anyway. Pointed out in bug 646013. --- diff --git a/glib/ghash.c b/glib/ghash.c index 4323068..d62db57 100644 --- a/glib/ghash.c +++ b/glib/ghash.c @@ -479,22 +479,28 @@ g_hash_table_remove_all_nodes (GHashTable *hash_table, { int i; - for (i = 0; i < hash_table->size; i++) + if (notify && + (hash_table->key_destroy_func != NULL || + hash_table->value_destroy_func != NULL)) { - GHashNode *node = &hash_table->nodes [i]; - - if (node->key_hash > 1) + for (i = 0; i < hash_table->size; i++) { - if (notify && hash_table->key_destroy_func) - hash_table->key_destroy_func (node->key); + GHashNode *node = &hash_table->nodes [i]; - if (notify && hash_table->value_destroy_func) - hash_table->value_destroy_func (node->value); + if (node->key_hash > 1) + { + if (hash_table->key_destroy_func != NULL) + hash_table->key_destroy_func (node->key); + + if (hash_table->value_destroy_func != NULL) + hash_table->value_destroy_func (node->value); + } } } /* We need to set node->key_hash = 0 for all nodes - might as well be GC - * friendly and clear everything */ + * friendly and clear everything + */ memset (hash_table->nodes, 0, hash_table->size * sizeof (GHashNode)); hash_table->nnodes = 0;