diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c
index 6f95f50..3732fc8 100644
--- a/src/backend/catalog/dependency.c
+++ b/src/backend/catalog/dependency.c
@@ -2152,12 +2152,24 @@ record_object_address_dependencies(const ObjectAddress *depender,
behavior);
}
+/*
+ * get_object_addresses_numelements
+ *
+ * Return the number of object addresses in the given ObjectAddresses, allowing
+ * external modules to loop over the array.
+ */
int
get_object_addresses_numelements(const ObjectAddresses *addresses)
{
return addresses->numrefs;
}
+/*
+ * get_object_addresses_element
+ *
+ * Return the ObjectAddress at position i, allowing to fetch it from an
+ * external module.
+ */
ObjectAddress *
get_object_addresses_element(const ObjectAddresses *addresses, int i)
{
diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c
index 9ed5715..4e112af 100644
--- a/src/backend/commands/event_trigger.c
+++ b/src/backend/commands/event_trigger.c
@@ -862,6 +862,8 @@ AtEOXact_EventTrigger(bool isCommit)
{
/* even on success we want to reset EventTriggerSQLDropInProgress */
EventTriggerSQLDropInProgress = false;
+ /* the list is palloc()ed and has already been taken care of */
+ EventTriggerSQLDropList = NULL;
}
/*
@@ -878,7 +880,7 @@ pg_event_trigger_dropped_objects(PG_FUNCTION_ARGS)
Tuplestorestate *tupstore;
MemoryContext per_query_ctx;
MemoryContext oldcontext;
- int i;
+ int i, n;
/*
* This function is meant to be called from within an event trigger in
@@ -914,7 +916,10 @@ pg_event_trigger_dropped_objects(PG_FUNCTION_ARGS)
MemoryContextSwitchTo(oldcontext);
- for (i = 0; i < get_object_addresses_numelements(EventTriggerSQLDropList); i++)
+ /* only call the get_object_addresses_numelements accessor function once */
+ n = get_object_addresses_numelements(EventTriggerSQLDropList);
+
+ for (i = 0; i < n; i++)
{
ObjectAddress *object;
Datum values[3];