diff options
Diffstat (limited to 'src/backend/utils')
-rw-r--r-- | src/backend/utils/activity/pgstat_xact.c | 40 | ||||
-rw-r--r-- | src/backend/utils/adt/ri_triggers.c | 19 |
2 files changed, 24 insertions, 35 deletions
diff --git a/src/backend/utils/activity/pgstat_xact.c b/src/backend/utils/activity/pgstat_xact.c index d6f660edf7b..5a3aca4aefd 100644 --- a/src/backend/utils/activity/pgstat_xact.c +++ b/src/backend/utils/activity/pgstat_xact.c @@ -70,16 +70,13 @@ AtEOXact_PgStat_DroppedStats(PgStat_SubXactStatus *xact_state, bool isCommit) dlist_mutable_iter iter; int not_freed_count = 0; - if (xact_state->pending_drops_count == 0) - { - Assert(dlist_is_empty(&xact_state->pending_drops)); + if (dclist_count(&xact_state->pending_drops) == 0) return; - } - dlist_foreach_modify(iter, &xact_state->pending_drops) + dclist_foreach_modify(iter, &xact_state->pending_drops) { PgStat_PendingDroppedStatsItem *pending = - dlist_container(PgStat_PendingDroppedStatsItem, node, iter.cur); + dclist_container(PgStat_PendingDroppedStatsItem, node, iter.cur); xl_xact_stats_item *it = &pending->item; if (isCommit && !pending->is_create) @@ -101,8 +98,7 @@ AtEOXact_PgStat_DroppedStats(PgStat_SubXactStatus *xact_state, bool isCommit) not_freed_count++; } - dlist_delete(&pending->node); - xact_state->pending_drops_count--; + dclist_delete_from(&xact_state->pending_drops, &pending->node); pfree(pending); } @@ -144,19 +140,18 @@ AtEOSubXact_PgStat_DroppedStats(PgStat_SubXactStatus *xact_state, dlist_mutable_iter iter; int not_freed_count = 0; - if (xact_state->pending_drops_count == 0) + if (dclist_count(&xact_state->pending_drops) == 0) return; parent_xact_state = pgstat_get_xact_stack_level(nestDepth - 1); - dlist_foreach_modify(iter, &xact_state->pending_drops) + dclist_foreach_modify(iter, &xact_state->pending_drops) { PgStat_PendingDroppedStatsItem *pending = - dlist_container(PgStat_PendingDroppedStatsItem, node, iter.cur); + dclist_container(PgStat_PendingDroppedStatsItem, node, iter.cur); xl_xact_stats_item *it = &pending->item; - dlist_delete(&pending->node); - xact_state->pending_drops_count--; + dclist_delete_from(&xact_state->pending_drops, &pending->node); if (!isCommit && pending->is_create) { @@ -175,8 +170,7 @@ AtEOSubXact_PgStat_DroppedStats(PgStat_SubXactStatus *xact_state, * remove the stats object, the surrounding transaction might * still abort. Pass it on to the parent. */ - dlist_push_tail(&parent_xact_state->pending_drops, &pending->node); - parent_xact_state->pending_drops_count++; + dclist_push_tail(&parent_xact_state->pending_drops, &pending->node); } else { @@ -184,7 +178,7 @@ AtEOSubXact_PgStat_DroppedStats(PgStat_SubXactStatus *xact_state, } } - Assert(xact_state->pending_drops_count == 0); + Assert(dclist_count(&xact_state->pending_drops) == 0); if (not_freed_count > 0) pgstat_request_entry_refs_gc(); } @@ -250,8 +244,7 @@ pgstat_get_xact_stack_level(int nest_level) xact_state = (PgStat_SubXactStatus *) MemoryContextAlloc(TopTransactionContext, sizeof(PgStat_SubXactStatus)); - dlist_init(&xact_state->pending_drops); - xact_state->pending_drops_count = 0; + dclist_init(&xact_state->pending_drops); xact_state->nest_level = nest_level; xact_state->prev = pgStatXactStack; xact_state->first = NULL; @@ -291,20 +284,20 @@ pgstat_get_transactional_drops(bool isCommit, xl_xact_stats_item **items) Assert(!isCommit || xact_state->nest_level == 1); Assert(!isCommit || xact_state->prev == NULL); - *items = palloc(xact_state->pending_drops_count + *items = palloc(dclist_count(&xact_state->pending_drops) * sizeof(xl_xact_stats_item)); - dlist_foreach(iter, &xact_state->pending_drops) + dclist_foreach(iter, &xact_state->pending_drops) { PgStat_PendingDroppedStatsItem *pending = - dlist_container(PgStat_PendingDroppedStatsItem, node, iter.cur); + dclist_container(PgStat_PendingDroppedStatsItem, node, iter.cur); if (isCommit && pending->is_create) continue; if (!isCommit && !pending->is_create) continue; - Assert(nitems < xact_state->pending_drops_count); + Assert(nitems < dclist_count(&xact_state->pending_drops)); (*items)[nitems++] = pending->item; } @@ -351,8 +344,7 @@ create_drop_transactional_internal(PgStat_Kind kind, Oid dboid, Oid objoid, bool drop->item.dboid = dboid; drop->item.objoid = objoid; - dlist_push_tail(&xact_state->pending_drops, &drop->node); - xact_state->pending_drops_count++; + dclist_push_tail(&xact_state->pending_drops, &drop->node); } /* diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index 1d503e7e011..61c2eecacaa 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -176,8 +176,7 @@ typedef struct RI_CompareHashEntry static HTAB *ri_constraint_cache = NULL; static HTAB *ri_query_cache = NULL; static HTAB *ri_compare_cache = NULL; -static dlist_head ri_constraint_cache_valid_list; -static int ri_constraint_cache_valid_count = 0; +static dclist_head ri_constraint_cache_valid_list; /* @@ -2172,10 +2171,9 @@ ri_LoadConstraintInfo(Oid constraintOid) /* * For efficient processing of invalidation messages below, we keep a - * doubly-linked list, and a count, of all currently valid entries. + * doubly-linked count list of all currently valid entries. */ - dlist_push_tail(&ri_constraint_cache_valid_list, &riinfo->valid_link); - ri_constraint_cache_valid_count++; + dclist_push_tail(&ri_constraint_cache_valid_list, &riinfo->valid_link); riinfo->valid = true; @@ -2233,13 +2231,13 @@ InvalidateConstraintCacheCallBack(Datum arg, int cacheid, uint32 hashvalue) * O(N^2) behavior in situations where a session touches many foreign keys * and also does many ALTER TABLEs, such as a restore from pg_dump. */ - if (ri_constraint_cache_valid_count > 1000) + if (dclist_count(&ri_constraint_cache_valid_list) > 1000) hashvalue = 0; /* pretend it's a cache reset */ - dlist_foreach_modify(iter, &ri_constraint_cache_valid_list) + dclist_foreach_modify(iter, &ri_constraint_cache_valid_list) { - RI_ConstraintInfo *riinfo = dlist_container(RI_ConstraintInfo, - valid_link, iter.cur); + RI_ConstraintInfo *riinfo = dclist_container(RI_ConstraintInfo, + valid_link, iter.cur); /* * We must invalidate not only entries directly matching the given @@ -2252,8 +2250,7 @@ InvalidateConstraintCacheCallBack(Datum arg, int cacheid, uint32 hashvalue) { riinfo->valid = false; /* Remove invalidated entries from the list, too */ - dlist_delete(iter.cur); - ri_constraint_cache_valid_count--; + dclist_delete_from(&ri_constraint_cache_valid_list, iter.cur); } } } |