Skip to content

Commit ff6d9cf

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 fa761d9 commit ff6d9cf

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
@@ -1131,6 +1131,7 @@ check_and_drop_existing_subscriptions(PGconn *conn,
11311131

11321132
PQclear(res);
11331133
destroyPQExpBuffer(query);
1134+
PQfreemem(dbname);
11341135
}
11351136

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

1333-
pg_free(slot_name_esc);
1334+
PQfreemem(slot_name_esc);
13341335

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

@@ -1376,7 +1377,7 @@ drop_replication_slot(PGconn *conn, struct LogicalRepInfo *dbinfo,
13761377

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

1379-
pg_free(slot_name_esc);
1380+
PQfreemem(slot_name_esc);
13801381

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

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

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

@@ -1639,7 +1640,7 @@ drop_publication(PGconn *conn, struct LogicalRepInfo *dbinfo)
16391640

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

1642-
pg_free(pubname_esc);
1643+
PQfreemem(pubname_esc);
16431644

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

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

1706-
pg_free(pubname_esc);
1707-
pg_free(subname_esc);
1708-
pg_free(pubconninfo_esc);
1709-
pg_free(replslotname_esc);
1707+
PQfreemem(pubname_esc);
1708+
PQfreemem(subname_esc);
1709+
PQfreemem(pubconninfo_esc);
1710+
PQfreemem(replslotname_esc);
17101711

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

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

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

1860-
pg_free(subname);
1861+
PQfreemem(subname);
18611862
destroyPQExpBuffer(str);
18621863
}
18631864

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