Skip to content

Commit 5b94e27

Browse files
committed
Fix some inconsistencies with memory freeing in pg_createsubscriber
The correct function documented to free the memory allocated for the result returned by PQescapeIdentifier() and PQescapeLiteral() is PQfreemem(). pg_createsubscriber.c relied on pg_free() instead, which is not incorrect as both do a free() internally, but inconsistent with the documentation. While on it, this commit fixes a small memory leak introduced by 4867f8a, as the code of pg_createsubscriber makes this effort. Author: Ranier Vilela Reviewed-by: Euler Taveira Discussion: https://postgr.es/m/CAEudQAp=AW5dJXrGLbC_aZg_9nOo=42W7uLDRONFQE-gcgnkgQ@mail.gmail.com Backpatch-through: 17
1 parent 1b5841d commit 5b94e27

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

src/bin/pg_basebackup/pg_createsubscriber.c

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,6 +1130,7 @@ check_and_drop_existing_subscriptions(PGconn *conn,
11301130

11311131
PQclear(res);
11321132
destroyPQExpBuffer(query);
1133+
PQfreemem(dbname);
11331134
}
11341135

11351136
/*
@@ -1329,7 +1330,7 @@ create_logical_replication_slot(PGconn *conn, struct LogicalRepInfo *dbinfo)
13291330
"SELECT lsn FROM pg_catalog.pg_create_logical_replication_slot(%s, 'pgoutput', false, false, false)",
13301331
slot_name_esc);
13311332

1332-
pg_free(slot_name_esc);
1333+
PQfreemem(slot_name_esc);
13331334

13341335
pg_log_debug("command is: %s", str->data);
13351336

@@ -1375,7 +1376,7 @@ drop_replication_slot(PGconn *conn, struct LogicalRepInfo *dbinfo,
13751376

13761377
appendPQExpBuffer(str, "SELECT pg_catalog.pg_drop_replication_slot(%s)", slot_name_esc);
13771378

1378-
pg_free(slot_name_esc);
1379+
PQfreemem(slot_name_esc);
13791380

13801381
pg_log_debug("command is: %s", str->data);
13811382

@@ -1614,8 +1615,8 @@ create_publication(PGconn *conn, struct LogicalRepInfo *dbinfo)
16141615
/* For cleanup purposes */
16151616
dbinfo->made_publication = true;
16161617

1617-
pg_free(ipubname_esc);
1618-
pg_free(spubname_esc);
1618+
PQfreemem(ipubname_esc);
1619+
PQfreemem(spubname_esc);
16191620
destroyPQExpBuffer(str);
16201621
}
16211622

@@ -1638,7 +1639,7 @@ drop_publication(PGconn *conn, struct LogicalRepInfo *dbinfo)
16381639

16391640
appendPQExpBuffer(str, "DROP PUBLICATION %s", pubname_esc);
16401641

1641-
pg_free(pubname_esc);
1642+
PQfreemem(pubname_esc);
16421643

16431644
pg_log_debug("command is: %s", str->data);
16441645

@@ -1702,10 +1703,10 @@ create_subscription(PGconn *conn, const struct LogicalRepInfo *dbinfo)
17021703
"slot_name = %s, copy_data = false)",
17031704
subname_esc, pubconninfo_esc, pubname_esc, replslotname_esc);
17041705

1705-
pg_free(pubname_esc);
1706-
pg_free(subname_esc);
1707-
pg_free(pubconninfo_esc);
1708-
pg_free(replslotname_esc);
1706+
PQfreemem(pubname_esc);
1707+
PQfreemem(subname_esc);
1708+
PQfreemem(pubconninfo_esc);
1709+
PQfreemem(replslotname_esc);
17091710

17101711
pg_log_debug("command is: %s", str->data);
17111712

@@ -1812,8 +1813,8 @@ set_replication_progress(PGconn *conn, const struct LogicalRepInfo *dbinfo, cons
18121813
PQclear(res);
18131814
}
18141815

1815-
pg_free(subname);
1816-
pg_free(dbname);
1816+
PQfreemem(subname);
1817+
PQfreemem(dbname);
18171818
pg_free(originname);
18181819
pg_free(lsnstr);
18191820
destroyPQExpBuffer(str);
@@ -1856,7 +1857,7 @@ enable_subscription(PGconn *conn, const struct LogicalRepInfo *dbinfo)
18561857
PQclear(res);
18571858
}
18581859

1859-
pg_free(subname);
1860+
PQfreemem(subname);
18601861
destroyPQExpBuffer(str);
18611862
}
18621863

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy