Drop the temporary tuple slots allocated by pgoutput.
authorAmit Kapila <[email protected]>
Thu, 27 Jun 2024 05:49:57 +0000 (11:19 +0530)
committerAmit Kapila <[email protected]>
Thu, 27 Jun 2024 05:49:57 +0000 (11:19 +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 05688cd41cef662e8f45e2be9348dff93828f03a..c57c5ed8de97f3110d5cccc71ada5598149c86f9 100644 (file)
@@ -1549,6 +1549,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);
 }