]> granicus.if.org Git - postgresql/commitdiff
Further cleanup of catcache.c ilist changes.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 18 Oct 2012 23:30:43 +0000 (19:30 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 18 Oct 2012 23:30:43 +0000 (19:30 -0400)
Remove useless duplicate initialization of bucket headers, don't use a
dlist_mutable_iter in a performance-critical path that doesn't need it,
make some other cosmetic changes for consistency's sake.

src/backend/utils/cache/catcache.c

index a293f570e1b28618bd6dd30733f9dfd586cd336b..9ae143272be15acdacb4e30ce03694b3117c89b6 100644 (file)
@@ -370,6 +370,7 @@ CatCacheRemoveCTup(CatCache *cache, CatCTup *ct)
                return;                                 /* nothing left to do */
        }
 
+       /* delink from linked list */
        dlist_delete(&ct->cache_elem);
 
        /* free associated tuple data */
@@ -452,9 +453,9 @@ CatalogCacheIdInvalidate(int cacheId, uint32 hashValue)
         */
        slist_foreach(cache_iter, &CacheHdr->ch_caches)
        {
+               CatCache   *ccp = slist_container(CatCache, cc_next, cache_iter.cur);
                Index           hashIndex;
                dlist_mutable_iter iter;
-               CatCache   *ccp = slist_container(CatCache, cc_next, cache_iter.cur);
 
                if (cacheId != ccp->id)
                        continue;
@@ -555,7 +556,7 @@ AtEOXact_CatCache(bool isCommit)
        {
                slist_iter  cache_iter;
 
-               slist_foreach(cache_iter, &(CacheHdr->ch_caches))
+               slist_foreach(cache_iter, &CacheHdr->ch_caches)
                {
                        CatCache   *ccp = slist_container(CatCache, cc_next, cache_iter.cur);
                        dlist_iter  iter;
@@ -682,7 +683,7 @@ CatalogCacheFlushCatalog(Oid catId)
 
        CACHE2_elog(DEBUG2, "CatalogCacheFlushCatalog called for %u", catId);
 
-       slist_foreach(iter, &(CacheHdr->ch_caches))
+       slist_foreach(iter, &CacheHdr->ch_caches)
        {
                CatCache   *cache = slist_container(CatCache, cc_next, iter.cur);
 
@@ -770,8 +771,10 @@ InitCatCache(int id,
 
        /*
         * allocate a new cache structure
+        *
+        * Note: we rely on zeroing to initialize all the dlist headers correctly
         */
-       cp = (CatCache *) palloc0(sizeof(CatCache) + nbuckets * sizeof(dlist_node));
+       cp = (CatCache *) palloc0(sizeof(CatCache) + nbuckets * sizeof(dlist_head));
 
        /*
         * initialize the cache's relation information for the relation
@@ -790,9 +793,6 @@ InitCatCache(int id,
        for (i = 0; i < nkeys; ++i)
                cp->cc_key[i] = key[i];
 
-       dlist_init(&cp->cc_lists);
-       MemSet(&cp->cc_bucket, 0, nbuckets * sizeof(dlist_head));
-
        /*
         * new cache is initialized as far as we can go for now. print some
         * debugging information, if appropriate.
@@ -1060,7 +1060,7 @@ SearchCatCache(CatCache *cache,
        ScanKeyData cur_skey[CATCACHE_MAXKEYS];
        uint32          hashValue;
        Index           hashIndex;
-       dlist_mutable_iter  iter;
+       dlist_iter      iter;
        dlist_head *bucket;
        CatCTup    *ct;
        Relation        relation;
@@ -1094,10 +1094,12 @@ SearchCatCache(CatCache *cache,
 
        /*
         * scan the hash bucket until we find a match or exhaust our tuples
+        *
+        * Note: it's okay to use dlist_foreach here, even though we modify the
+        * dlist within the loop, because we don't continue the loop afterwards.
         */
        bucket = &cache->cc_bucket[hashIndex];
-
-       dlist_foreach_modify(iter, bucket)
+       dlist_foreach(iter, bucket)
        {
                bool            res;
 
@@ -1382,6 +1384,9 @@ SearchCatCacheList(CatCache *cache,
 
        /*
         * scan the items until we find a match or exhaust our list
+        *
+        * Note: it's okay to use dlist_foreach here, even though we modify the
+        * dlist within the loop, because we don't continue the loop afterwards.
         */
        dlist_foreach(iter, &cache->cc_lists)
        {
@@ -1807,11 +1812,11 @@ PrepareToInvalidateCacheTuple(Relation relation,
         * ----------------
         */
 
-       slist_foreach(iter, &(CacheHdr->ch_caches))
+       slist_foreach(iter, &CacheHdr->ch_caches)
        {
+               CatCache   *ccp = slist_container(CatCache, cc_next, iter.cur);
                uint32          hashvalue;
                Oid                     dbid;
-               CatCache   *ccp = slist_container(CatCache, cc_next, iter.cur);
 
                if (ccp->cc_reloid != reloid)
                        continue;