aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2017-04-23 15:36:47 -0700
committerAndres Freund <andres@anarazel.de>2017-04-23 15:54:41 -0700
commite84d243b1ce6366e8415cefc623ca53e73a20393 (patch)
tree2244921d33fab6a5171b8f8eed5467a65b15aeaf
parent61c21ddad03dda1f92a05a723cf449087d80ec08 (diff)
downloadpostgresql-e84d243b1ce6366e8415cefc623ca53e73a20393.tar.gz
postgresql-e84d243b1ce6366e8415cefc623ca53e73a20393.zip
Initialize all memory for logical replication relation cache.
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
-rw-r--r--src/backend/replication/logical/relation.c15
1 files changed, 3 insertions, 12 deletions
diff --git a/src/backend/replication/logical/relation.c b/src/backend/replication/logical/relation.c
index 875a08185a6..7c93bfb80a0 100644
--- a/src/backend/replication/logical/relation.c
+++ b/src/backend/replication/logical/relation.c
@@ -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);
}