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);
 }