diff --git a/src/backend/executor/nodeResultCache.c b/src/backend/executor/nodeResultCache.c index 534d733eb3..919238d1ff 100644 --- a/src/backend/executor/nodeResultCache.c +++ b/src/backend/executor/nodeResultCache.c @@ -298,41 +298,6 @@ remove_cache_entry(ResultCacheState *rcstate, ResultCacheEntry *entry) dlist_delete(&entry->key->lru_node); -#ifdef USE_ASSERT_CHECKING - - /* - * Validate the memory accounting code is correct in assert builds. XXX is - * this too expensive for USE_ASSERT_CHECKING? - */ - { - int i, - count; - uint64 mem = 0; - - count = 0; - for (i = 0; i < rcstate->hashtable->size; i++) - { - ResultCacheEntry *entry = &rcstate->hashtable->data[i]; - - if (entry->status == resultcache_SH_IN_USE) - { - ResultCacheTuple *tuple = entry->tuplehead; - - mem += EMPTY_ENTRY_MEMORY_BYTES(entry); - while (tuple != NULL) - { - mem += CACHE_TUPLE_BYTES(tuple); - tuple = tuple->next; - } - count++; - } - } - - Assert(count == rcstate->hashtable->members); - Assert(mem == rcstate->mem_used); - } -#endif - /* Remove all of the tuples from this entry */ entry_purge_tuples(rcstate, entry); @@ -977,6 +942,35 @@ ExecInitResultCache(ResultCache *node, EState *estate, int eflags) void ExecEndResultCache(ResultCacheState *node) { +#ifdef USE_ASSERT_CHECKING + /* Validate the memory accounting code is correct in assert builds. */ + { + int count; + uint64 mem = 0; + resultcache_iterator i; + ResultCacheEntry *entry; + + resultcache_start_iterate(node->hashtable, &i); + + count = 0; + while ((entry = resultcache_iterate(node->hashtable, &i)) != NULL) + { + ResultCacheTuple *tuple = entry->tuplehead; + + mem += EMPTY_ENTRY_MEMORY_BYTES(entry); + while (tuple != NULL) + { + mem += CACHE_TUPLE_BYTES(tuple); + tuple = tuple->next; + } + count++; + } + + Assert(count == node->hashtable->members); + Assert(mem == node->mem_used); + } +#endif + /* * When ending a parallel worker, copy the statistics gathered by the * worker back into shared memory so that it can be picked up by the main