Remove a couple of unnecessary calls of CreateCacheMemoryContext. These
authorTom Lane <[email protected]>
Sun, 27 Dec 2009 18:55:52 +0000 (18:55 +0000)
committerTom Lane <[email protected]>
Sun, 27 Dec 2009 18:55:52 +0000 (18:55 +0000)
probably got there via blind copy-and-paste from one of the legitimate
callers, so rearrange and comment that code a bit to make it clearer that
this isn't a necessary prerequisite to hash_create.  Per observation
from Robert Haas.

src/backend/optimizer/util/predtest.c
src/backend/parser/parse_oper.c
src/backend/utils/cache/relcache.c
src/backend/utils/cache/ts_cache.c
src/backend/utils/cache/typcache.c

index 646bdc338845b38d935864663d76b21b212214d5..731155f9c06ac5780b414e639db631c7f5306b97 100644 (file)
@@ -1532,9 +1532,6 @@ get_btree_test_op(Oid pred_op, Oid clause_op, bool refute_it)
        /* First time through: initialize the hash table */
        HASHCTL     ctl;
 
-       if (!CacheMemoryContext)
-           CreateCacheMemoryContext();
-
        MemSet(&ctl, 0, sizeof(ctl));
        ctl.keysize = sizeof(OprProofCacheKey);
        ctl.entrysize = sizeof(OprProofCacheEntry);
index 3d3013ae1a502478d565ebadac1414e9822419ae..7e92cb4facf8deda6abf7d98982e16a1ca96c563 100644 (file)
@@ -1098,9 +1098,6 @@ find_oper_cache_entry(OprCacheKey *key)
        /* First time through: initialize the hash table */
        HASHCTL     ctl;
 
-       if (!CacheMemoryContext)
-           CreateCacheMemoryContext();
-
        MemSet(&ctl, 0, sizeof(ctl));
        ctl.keysize = sizeof(OprCacheKey);
        ctl.entrysize = sizeof(OprCacheEntry);
index eba719418408766fa16135252252399f374c23d5..741aed24930bb43b83cb6766dbb98461916b111a 100644 (file)
@@ -1181,15 +1181,16 @@ LookupOpclassInfo(Oid operatorClassOid,
        /* First time through: initialize the opclass cache */
        HASHCTL     ctl;
 
-       if (!CacheMemoryContext)
-           CreateCacheMemoryContext();
-
        MemSet(&ctl, 0, sizeof(ctl));
        ctl.keysize = sizeof(Oid);
        ctl.entrysize = sizeof(OpClassCacheEnt);
        ctl.hash = oid_hash;
        OpClassCache = hash_create("Operator class cache", 64,
                                   &ctl, HASH_ELEM | HASH_FUNCTION);
+
+       /* Also make sure CacheMemoryContext exists */
+       if (!CacheMemoryContext)
+           CreateCacheMemoryContext();
    }
 
    opcentry = (OpClassCacheEnt *) hash_search(OpClassCache,
@@ -2513,17 +2514,14 @@ RelationBuildLocalRelation(const char *relname,
 void
 RelationCacheInitialize(void)
 {
-   MemoryContext oldcxt;
    HASHCTL     ctl;
 
    /*
-    * switch to cache memory context
+    * make sure cache memory context exists
     */
    if (!CacheMemoryContext)
        CreateCacheMemoryContext();
 
-   oldcxt = MemoryContextSwitchTo(CacheMemoryContext);
-
    /*
     * create hashtable that indexes the relcache
     */
@@ -2533,8 +2531,6 @@ RelationCacheInitialize(void)
    ctl.hash = oid_hash;
    RelationIdCache = hash_create("Relcache by OID", INITRELCACHESIZE,
                                  &ctl, HASH_ELEM | HASH_FUNCTION);
-
-   MemoryContextSwitchTo(oldcxt);
 }
 
 /*
index d930eb23a43fed8456c8e87f78ce2f7e4a4824d4..c06eec116ccf7519a58536d2825141c0543315f9 100644 (file)
@@ -42,7 +42,6 @@
 #include "tsearch/ts_cache.h"
 #include "utils/array.h"
 #include "utils/builtins.h"
-#include "utils/catcache.h"
 #include "utils/fmgroids.h"
 #include "utils/inval.h"
 #include "utils/lsyscache.h"
@@ -119,9 +118,6 @@ lookup_ts_parser_cache(Oid prsId)
        /* First time through: initialize the hash table */
        HASHCTL     ctl;
 
-       if (!CacheMemoryContext)
-           CreateCacheMemoryContext();
-
        MemSet(&ctl, 0, sizeof(ctl));
        ctl.keysize = sizeof(Oid);
        ctl.entrysize = sizeof(TSParserCacheEntry);
@@ -131,6 +127,10 @@ lookup_ts_parser_cache(Oid prsId)
        /* Flush cache on pg_ts_parser changes */
        CacheRegisterSyscacheCallback(TSPARSEROID, InvalidateTSCacheCallBack,
                                      PointerGetDatum(TSParserCacheHash));
+
+       /* Also make sure CacheMemoryContext exists */
+       if (!CacheMemoryContext)
+           CreateCacheMemoryContext();
    }
 
    /* Check single-entry cache */
@@ -219,9 +219,6 @@ lookup_ts_dictionary_cache(Oid dictId)
        /* First time through: initialize the hash table */
        HASHCTL     ctl;
 
-       if (!CacheMemoryContext)
-           CreateCacheMemoryContext();
-
        MemSet(&ctl, 0, sizeof(ctl));
        ctl.keysize = sizeof(Oid);
        ctl.entrysize = sizeof(TSDictionaryCacheEntry);
@@ -233,6 +230,10 @@ lookup_ts_dictionary_cache(Oid dictId)
                                      PointerGetDatum(TSDictionaryCacheHash));
        CacheRegisterSyscacheCallback(TSTEMPLATEOID, InvalidateTSCacheCallBack,
                                      PointerGetDatum(TSDictionaryCacheHash));
+
+       /* Also make sure CacheMemoryContext exists */
+       if (!CacheMemoryContext)
+           CreateCacheMemoryContext();
    }
 
    /* Check single-entry cache */
@@ -370,9 +371,6 @@ init_ts_config_cache(void)
 {
    HASHCTL     ctl;
 
-   if (!CacheMemoryContext)
-       CreateCacheMemoryContext();
-
    MemSet(&ctl, 0, sizeof(ctl));
    ctl.keysize = sizeof(Oid);
    ctl.entrysize = sizeof(TSConfigCacheEntry);
@@ -384,6 +382,10 @@ init_ts_config_cache(void)
                                  PointerGetDatum(TSConfigCacheHash));
    CacheRegisterSyscacheCallback(TSCONFIGMAP, InvalidateTSCacheCallBack,
                                  PointerGetDatum(TSConfigCacheHash));
+
+   /* Also make sure CacheMemoryContext exists */
+   if (!CacheMemoryContext)
+       CreateCacheMemoryContext();
 }
 
 /*
index 1eae55f2900db32f8e9493c31cd8d83c604e35c4..01b7be06c6cad9482327bb033512c24403197249 100644 (file)
@@ -109,15 +109,16 @@ lookup_type_cache(Oid type_id, int flags)
        /* First time through: initialize the hash table */
        HASHCTL     ctl;
 
-       if (!CacheMemoryContext)
-           CreateCacheMemoryContext();
-
        MemSet(&ctl, 0, sizeof(ctl));
        ctl.keysize = sizeof(Oid);
        ctl.entrysize = sizeof(TypeCacheEntry);
        ctl.hash = oid_hash;
        TypeCacheHash = hash_create("Type information cache", 64,
                                    &ctl, HASH_ELEM | HASH_FUNCTION);
+
+       /* Also make sure CacheMemoryContext exists */
+       if (!CacheMemoryContext)
+           CreateCacheMemoryContext();
    }
 
    /* Try to look up an existing entry */
@@ -249,8 +250,8 @@ lookup_type_cache(Oid type_id, int flags)
     * Set up fmgr lookup info as requested
     *
     * Note: we tell fmgr the finfo structures live in CacheMemoryContext,
-    * which is not quite right (they're really in DynaHashContext) but this
-    * will do for our purposes.
+    * which is not quite right (they're really in the hash table's private
+    * memory context) but this will do for our purposes.
     */
    if ((flags & TYPECACHE_EQ_OPR_FINFO) &&
        typentry->eq_opr_finfo.fn_oid == InvalidOid &&
@@ -424,15 +425,16 @@ assign_record_type_typmod(TupleDesc tupDesc)
        /* First time through: initialize the hash table */
        HASHCTL     ctl;
 
-       if (!CacheMemoryContext)
-           CreateCacheMemoryContext();
-
        MemSet(&ctl, 0, sizeof(ctl));
        ctl.keysize = REC_HASH_KEYS * sizeof(Oid);
        ctl.entrysize = sizeof(RecordCacheEntry);
        ctl.hash = tag_hash;
        RecordCacheHash = hash_create("Record information cache", 64,
                                      &ctl, HASH_ELEM | HASH_FUNCTION);
+
+       /* Also make sure CacheMemoryContext exists */
+       if (!CacheMemoryContext)
+           CreateCacheMemoryContext();
    }
 
    /* Find or create a hashtable entry for this hash class */