]> granicus.if.org Git - postgresql/commitdiff
Initialize all memory for logical replication relation cache.
authorAndres Freund <andres@anarazel.de>
Sun, 23 Apr 2017 22:36:47 +0000 (15:36 -0700)
committerAndres Freund <andres@anarazel.de>
Sun, 23 Apr 2017 22:54:41 +0000 (15:54 -0700)
As reported by buildfarm animal skink / valgrind, some of the
variables weren't always initialized.  To avoid further mishaps use
memset to ensure the entire entry is initialized.

Author: Petr Jelinek
Reported-By: Andres Freund
Discussion: https://postgr.es/m/20170422183123.w2jgiuxtts7qrqaq@alap3.anarazel.de
Backpatch: none, code new in master

src/backend/replication/logical/relation.c

index 875a08185a6d5c28948c950e87c9263675873fd6..7c93bfb80a050b4b38e27fb1666aa2f1215a5588 100644 (file)
@@ -82,7 +82,7 @@ logicalrep_relmap_invalidate_cb(Datum arg, Oid reloid)
  * Initialize the relation map cache.
  */
 static void
-logicalrep_relmap_init()
+logicalrep_relmap_init(void)
 {
        HASHCTL         ctl;
 
@@ -141,19 +141,10 @@ logicalrep_relmap_free_entry(LogicalRepRelMapEntry *entry)
                pfree(remoterel->attnames);
                pfree(remoterel->atttyps);
        }
-       remoterel->attnames = NULL;
-       remoterel->atttyps = NULL;
-
        bms_free(remoterel->attkeys);
-       remoterel->attkeys = NULL;
 
        if (entry->attrmap)
                pfree(entry->attrmap);
-
-       entry->attrmap = NULL;
-       remoterel->natts = 0;
-       entry->localreloid = InvalidOid;
-       entry->localrel = NULL;
 }
 
 /*
@@ -182,6 +173,8 @@ logicalrep_relmap_update(LogicalRepRelation *remoterel)
        if (found)
                logicalrep_relmap_free_entry(entry);
 
+       memset(entry, 0, sizeof(LogicalRepRelMapEntry));
+
        /* Make cached copy of the data */
        oldctx = MemoryContextSwitchTo(LogicalRepRelMapContext);
        entry->remoterel.remoteid = remoterel->remoteid;
@@ -197,8 +190,6 @@ logicalrep_relmap_update(LogicalRepRelation *remoterel)
        }
        entry->remoterel.replident = remoterel->replident;
        entry->remoterel.attkeys = bms_copy(remoterel->attkeys);
-       entry->attrmap = NULL;
-       entry->localreloid = InvalidOid;
        MemoryContextSwitchTo(oldctx);
 }