diff options
author | Andres Freund <andres@anarazel.de> | 2017-04-23 15:36:47 -0700 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2017-04-23 15:54:41 -0700 |
commit | e84d243b1ce6366e8415cefc623ca53e73a20393 (patch) | |
tree | 2244921d33fab6a5171b8f8eed5467a65b15aeaf | |
parent | 61c21ddad03dda1f92a05a723cf449087d80ec08 (diff) | |
download | postgresql-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.c | 15 |
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); } |