postgres.git / summary / log / commit / refs
commit 76fda614027436ca030e1fac4fe33484e995970f
Author: Amit Kapila <akapila@postgresql.org>
Date: Thu Jun 27 05:13:52 2024 +0000
Drop the temporary tuple slots allocated by pgoutput.
In pgoutput, when converting the child table's tuple format to match the
parent table's, we temporarily create a new slot to store the converted
tuple. However, we missed to drop such temporary slots, leading to
resource leakage.
Reported-by: Bowen Shi
Author: Hou Zhijie
Reviewed-by: Amit Kapila
Backpatch-through: 15
Discussion: https://postgr.es/m/CAM_vCudv8dc3sjWiPkXx5F2b27UV7_YRKRbtSCcE-pv=cVACGA@mail.gmail.com
src/backend/replication/pgoutput/pgoutput.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c
index 5fc0defec3a..abb82ecb18d 100644
--- a/src/backend/replication/pgoutput/pgoutput.c
+++ b/src/backend/replication/pgoutput/pgoutput.c
@@ -1587,6 +1587,16 @@ pgoutput_change(LogicalDecodingContext *ctx, ReorderBufferTXN *txn,
ancestor = NULL;
}
+ /* Drop the new slots that were used to store the converted tuples. */
+ if (relentry->attrmap)
+ {
+ if (old_slot)
+ ExecDropSingleTupleTableSlot(old_slot);
+
+ if (new_slot)
+ ExecDropSingleTupleTableSlot(new_slot);
+ }
+
/* Cleanup */
MemoryContextSwitchTo(old);
MemoryContextReset(data->context);
[parent: eb144dfcafdd]