diff --git a/src/backend/utils/cache/typcache.c b/src/backend/utils/cache/typcache.c index 4915ef5934..4757e8fa80 100644 --- a/src/backend/utils/cache/typcache.c +++ b/src/backend/utils/cache/typcache.c @@ -1970,18 +1970,16 @@ assign_record_type_typmod(TupleDesc tupDesc) CreateCacheMemoryContext(); } - /* Find or create a hashtable entry for this tuple descriptor */ + /* Find a hashtable entry for this tuple descriptor */ recentry = (RecordCacheEntry *) hash_search(RecordCacheHash, (void *) &tupDesc, - HASH_ENTER, &found); + HASH_FIND, &found); if (found && recentry->tupdesc != NULL) { tupDesc->tdtypmod = recentry->tupdesc->tdtypmod; return; } - /* Not present, so need to manufacture an entry */ - recentry->tupdesc = NULL; oldcxt = MemoryContextSwitchTo(CacheMemoryContext); /* Look in the SharedRecordTypmodRegistry, if attached */ @@ -1995,6 +1993,10 @@ assign_record_type_typmod(TupleDesc tupDesc) } ensure_record_cache_typmod_slot_exists(entDesc->tdtypmod); RecordCacheArray[entDesc->tdtypmod] = entDesc; + /* Not present, so need to manufacture an entry */ + recentry = (RecordCacheEntry *) hash_search(RecordCacheHash, + (void *) &tupDesc, + HASH_ENTER, NULL); recentry->tupdesc = entDesc; /* Assign a unique tupdesc identifier, too. */