Skip to content

Commit dc5aeca

Browse files
committed
Remove unnecessary "head" arguments from some dlist/slist functions.
dlist_delete, dlist_insert_after, dlist_insert_before, slist_insert_after do not need access to the list header, and indeed insisting on that negates one of the main advantages of a doubly-linked list. In consequence, revert addition of "cache_bucket" field to CatCTup.
1 parent 8f8d746 commit dc5aeca

File tree

5 files changed

+27
-48
lines changed

5 files changed

+27
-48
lines changed

src/backend/postmaster/autovacuum.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,6 @@ AutoVacLauncherMain(int argc, char *argv[])
580580
struct timeval nap;
581581
TimestampTz current_time = 0;
582582
bool can_launch;
583-
avl_dbase *avdb;
584583
int rc;
585584

586585
/*
@@ -725,7 +724,8 @@ AutoVacLauncherMain(int argc, char *argv[])
725724
worker->wi_tableoid = InvalidOid;
726725
worker->wi_proc = NULL;
727726
worker->wi_launchtime = 0;
728-
dlist_push_head(&AutoVacuumShmem->av_freeWorkers, &worker->wi_links);
727+
dlist_push_head(&AutoVacuumShmem->av_freeWorkers,
728+
&worker->wi_links);
729729
AutoVacuumShmem->av_startingWorker = NULL;
730730
elog(WARNING, "worker took too long to start; canceled");
731731
}
@@ -760,6 +760,8 @@ AutoVacLauncherMain(int argc, char *argv[])
760760
* distant adl_next_worker first, we obtain our database from the
761761
* tail of the list.
762762
*/
763+
avl_dbase *avdb;
764+
763765
avdb = dlist_tail_element(avl_dbase, adl_node, &DatabaseList);
764766

765767
/*
@@ -790,8 +792,6 @@ AutoVacLauncherMain(int argc, char *argv[])
790792
static void
791793
launcher_determine_sleep(bool canlaunch, bool recursing, struct timeval * nap)
792794
{
793-
avl_dbase *avdb;
794-
795795
/*
796796
* We sleep until the next scheduled vacuum. We trust that when the
797797
* database list was built, care was taken so that no entries have times
@@ -807,6 +807,7 @@ launcher_determine_sleep(bool canlaunch, bool recursing, struct timeval * nap)
807807
{
808808
TimestampTz current_time = GetCurrentTimestamp();
809809
TimestampTz next_wakeup;
810+
avl_dbase *avdb;
810811
long secs;
811812
int usecs;
812813

@@ -1677,15 +1678,16 @@ FreeWorkerInfo(int code, Datum arg)
16771678
*/
16781679
AutovacuumLauncherPid = AutoVacuumShmem->av_launcherpid;
16791680

1680-
dlist_delete(&AutoVacuumShmem->av_runningWorkers, &MyWorkerInfo->wi_links);
1681+
dlist_delete(&MyWorkerInfo->wi_links);
16811682
MyWorkerInfo->wi_dboid = InvalidOid;
16821683
MyWorkerInfo->wi_tableoid = InvalidOid;
16831684
MyWorkerInfo->wi_proc = NULL;
16841685
MyWorkerInfo->wi_launchtime = 0;
16851686
MyWorkerInfo->wi_cost_delay = 0;
16861687
MyWorkerInfo->wi_cost_limit = 0;
16871688
MyWorkerInfo->wi_cost_limit_base = 0;
1688-
dlist_push_head(&AutoVacuumShmem->av_freeWorkers, &MyWorkerInfo->wi_links);
1689+
dlist_push_head(&AutoVacuumShmem->av_freeWorkers,
1690+
&MyWorkerInfo->wi_links);
16891691
/* not mine anymore */
16901692
MyWorkerInfo = NULL;
16911693

@@ -2863,7 +2865,8 @@ AutoVacuumShmemInit(void)
28632865

28642866
/* initialize the WorkerInfo free list */
28652867
for (i = 0; i < autovacuum_max_workers; i++)
2866-
dlist_push_head(&AutoVacuumShmem->av_freeWorkers, &worker[i].wi_links);
2868+
dlist_push_head(&AutoVacuumShmem->av_freeWorkers,
2869+
&worker[i].wi_links);
28672870
}
28682871
else
28692872
Assert(found);

src/backend/postmaster/postmaster.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2696,7 +2696,7 @@ CleanupBackend(int pid,
26962696
ShmemBackendArrayRemove(bp);
26972697
#endif
26982698
}
2699-
dlist_delete(&BackendList, iter.cur);
2699+
dlist_delete(iter.cur);
27002700
free(bp);
27012701
break;
27022702
}
@@ -2744,7 +2744,7 @@ HandleChildCrash(int pid, int exitstatus, const char *procname)
27442744
ShmemBackendArrayRemove(bp);
27452745
#endif
27462746
}
2747-
dlist_delete(&BackendList, iter.cur);
2747+
dlist_delete(iter.cur);
27482748
free(bp);
27492749
/* Keep looping so we can signal remaining backends */
27502750
}

src/backend/utils/cache/catcache.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ CatCacheRemoveCTup(CatCache *cache, CatCTup *ct)
370370
return; /* nothing left to do */
371371
}
372372

373-
dlist_delete(ct->cache_bucket, &ct->cache_elem);
373+
dlist_delete(&ct->cache_elem);
374374

375375
/* free associated tuple data */
376376
if (ct->tuple.t_data != NULL)
@@ -413,7 +413,7 @@ CatCacheRemoveCList(CatCache *cache, CatCList *cl)
413413
}
414414

415415
/* delink from linked list */
416-
dlist_delete(&cache->cc_lists, &cl->cache_elem);
416+
dlist_delete(&cl->cache_elem);
417417

418418
/* free associated tuple data */
419419
if (cl->tuple.t_data != NULL)
@@ -1664,15 +1664,13 @@ CatalogCacheCreateEntry(CatCache *cache, HeapTuple ntp,
16641664
*/
16651665
ct->ct_magic = CT_MAGIC;
16661666
ct->my_cache = cache;
1667-
ct->cache_bucket = &cache->cc_bucket[hashIndex];
1668-
16691667
ct->c_list = NULL;
16701668
ct->refcount = 0; /* for the moment */
16711669
ct->dead = false;
16721670
ct->negative = negative;
16731671
ct->hash_value = hashValue;
16741672

1675-
dlist_push_head(ct->cache_bucket, &ct->cache_elem);
1673+
dlist_push_head(&cache->cc_bucket[hashIndex], &ct->cache_elem);
16761674

16771675
cache->cc_ntup++;
16781676
CacheHdr->ch_ntup++;

src/include/lib/ilist.h

Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
* continue; // don't touch this one
9090
*
9191
* // unlink the current table from the linked list
92-
* dlist_delete(&db->tables, miter.cur);
92+
* dlist_delete(miter.cur);
9393
* // as these lists never manage memory, we can still access the table
9494
* // after it's been unlinked
9595
* drop_table(db, tbl);
@@ -271,11 +271,9 @@ extern void dlist_init(dlist_head *head);
271271
extern bool dlist_is_empty(dlist_head *head);
272272
extern void dlist_push_head(dlist_head *head, dlist_node *node);
273273
extern void dlist_push_tail(dlist_head *head, dlist_node *node);
274-
extern void dlist_insert_after(dlist_head *head,
275-
dlist_node *after, dlist_node *node);
276-
extern void dlist_insert_before(dlist_head *head,
277-
dlist_node *before, dlist_node *node);
278-
extern void dlist_delete(dlist_head *head, dlist_node *node);
274+
extern void dlist_insert_after(dlist_node *after, dlist_node *node);
275+
extern void dlist_insert_before(dlist_node *before, dlist_node *node);
276+
extern void dlist_delete(dlist_node *node);
279277
extern dlist_node *dlist_pop_head_node(dlist_head *head);
280278
extern void dlist_move_head(dlist_head *head, dlist_node *node);
281279
extern bool dlist_has_next(dlist_head *head, dlist_node *node);
@@ -352,50 +350,34 @@ dlist_push_tail(dlist_head *head, dlist_node *node)
352350
* Insert a node after another *in the same list*
353351
*/
354352
STATIC_IF_INLINE void
355-
dlist_insert_after(dlist_head *head, dlist_node *after, dlist_node *node)
353+
dlist_insert_after(dlist_node *after, dlist_node *node)
356354
{
357-
dlist_check(head);
358-
/* XXX: assert 'after' is in 'head'? */
359-
360355
node->prev = after;
361356
node->next = after->next;
362357
after->next = node;
363358
node->next->prev = node;
364-
365-
dlist_check(head);
366359
}
367360

368361
/*
369362
* Insert a node before another *in the same list*
370363
*/
371364
STATIC_IF_INLINE void
372-
dlist_insert_before(dlist_head *head, dlist_node *before, dlist_node *node)
365+
dlist_insert_before(dlist_node *before, dlist_node *node)
373366
{
374-
dlist_check(head);
375-
/* XXX: assert 'before' is in 'head'? */
376-
377367
node->prev = before->prev;
378368
node->next = before;
379369
before->prev = node;
380370
node->prev->next = node;
381-
382-
dlist_check(head);
383371
}
384372

385373
/*
386-
* Delete 'node' from list.
387-
*
388-
* It is not allowed to delete a 'node' which is is not in the list 'head'
374+
* Delete 'node' from its list (it must be in one).
389375
*/
390376
STATIC_IF_INLINE void
391-
dlist_delete(dlist_head *head, dlist_node *node)
377+
dlist_delete(dlist_node *node)
392378
{
393-
dlist_check(head);
394-
395379
node->prev->next = node->next;
396380
node->next->prev = node->prev;
397-
398-
dlist_check(head);
399381
}
400382

401383
/*
@@ -408,7 +390,7 @@ dlist_pop_head_node(dlist_head *head)
408390

409391
Assert(!dlist_is_empty(head));
410392
node = head->head.next;
411-
dlist_delete(head, node);
393+
dlist_delete(node);
412394
return node;
413395
}
414396

@@ -425,7 +407,7 @@ dlist_move_head(dlist_head *head, dlist_node *node)
425407
if (head->head.next == node)
426408
return;
427409

428-
dlist_delete(head, node);
410+
dlist_delete(node);
429411
dlist_push_head(head, node);
430412

431413
dlist_check(head);
@@ -591,8 +573,7 @@ dlist_tail_node(dlist_head *head)
591573
extern void slist_init(slist_head *head);
592574
extern bool slist_is_empty(slist_head *head);
593575
extern void slist_push_head(slist_head *head, slist_node *node);
594-
extern void slist_insert_after(slist_head *head,
595-
slist_node *after, slist_node *node);
576+
extern void slist_insert_after(slist_node *after, slist_node *node);
596577
extern slist_node *slist_pop_head_node(slist_head *head);
597578
extern bool slist_has_next(slist_head *head, slist_node *node);
598579
extern slist_node *slist_next_node(slist_head *head, slist_node *node);
@@ -640,12 +621,10 @@ slist_push_head(slist_head *head, slist_node *node)
640621
* Insert a node after another *in the same list*
641622
*/
642623
STATIC_IF_INLINE void
643-
slist_insert_after(slist_head *head, slist_node *after, slist_node *node)
624+
slist_insert_after(slist_node *after, slist_node *node)
644625
{
645626
node->next = after->next;
646627
after->next = node;
647-
648-
slist_check(head);
649628
}
650629

651630
/*

src/include/utils/catcache.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ typedef struct catctup
8282
* lookups.
8383
*/
8484
dlist_node cache_elem; /* list member of per-bucket list */
85-
dlist_head *cache_bucket; /* containing bucket dlist */
8685

8786
/*
8887
* The tuple may also be a member of at most one CatCList. (If a single

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy