Drop the temporary tuple slots allocated by pgoutput.
authorAmit Kapila <akapila@postgresql.org>
Thu, 27 Jun 2024 06:05:00 +0000 (11:35 +0530)
committerAmit Kapila <akapila@postgresql.org>
Thu, 27 Jun 2024 06:05:00 +0000 (11:35 +0530)
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

index d2b35cfb96d7bb94ccccf39379394650d1bd99e3..abef4eaf68befafc738395af92f0b71aab6e0183 100644 (file)
@@ -1554,6 +1554,16 @@ cleanup:
        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);
+   }
+
    MemoryContextSwitchTo(old);
    MemoryContextReset(data->context);
 }