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];