From d137cb52cb7fd44a3f24f3c750fbf7924a4e9532 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Thu, 19 Jan 2023 18:50:01 -0800 Subject: [PATCH] Remove SHM_QUEUE Prior patches got rid of all the uses of SHM_QUEUE. ilist.h style lists are more widely used and have an easier to use interface. As there are no users left, remove SHM_QUEUE. Reviewed-by: Thomas Munro (in an older version) Discussion: https://postgr.es/m/20221120055930.t6kl3tyivzhlrzu2@awork3.anarazel.de Discussion: https://postgr.es/m/20200211042229.msv23badgqljrdg2@alap3.anarazel.de --- src/backend/storage/ipc/Makefile | 1 - src/backend/storage/ipc/meson.build | 1 - src/backend/storage/ipc/shmqueue.c | 190 ---------------------------- src/include/storage/shmem.h | 22 ---- src/tools/pgindent/typedefs.list | 1 - 5 files changed, 215 deletions(-) delete mode 100644 src/backend/storage/ipc/shmqueue.c diff --git a/src/backend/storage/ipc/Makefile b/src/backend/storage/ipc/Makefile index df90c6b093..6d5b921038 100644 --- a/src/backend/storage/ipc/Makefile +++ b/src/backend/storage/ipc/Makefile @@ -21,7 +21,6 @@ OBJS = \ shm_mq.o \ shm_toc.o \ shmem.o \ - shmqueue.o \ signalfuncs.o \ sinval.o \ sinvaladt.o \ diff --git a/src/backend/storage/ipc/meson.build b/src/backend/storage/ipc/meson.build index 2e29e7fe47..79a16d077f 100644 --- a/src/backend/storage/ipc/meson.build +++ b/src/backend/storage/ipc/meson.build @@ -13,7 +13,6 @@ backend_sources += files( 'shm_mq.c', 'shm_toc.c', 'shmem.c', - 'shmqueue.c', 'signalfuncs.c', 'sinval.c', 'sinvaladt.c', diff --git a/src/backend/storage/ipc/shmqueue.c b/src/backend/storage/ipc/shmqueue.c deleted file mode 100644 index 5ae0175cdb..0000000000 --- a/src/backend/storage/ipc/shmqueue.c +++ /dev/null @@ -1,190 +0,0 @@ -/*------------------------------------------------------------------------- - * - * shmqueue.c - * shared memory linked lists - * - * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * - * IDENTIFICATION - * src/backend/storage/ipc/shmqueue.c - * - * NOTES - * - * Package for managing doubly-linked lists in shared memory. - * The only tricky thing is that SHM_QUEUE will usually be a field - * in a larger record. SHMQueueNext has to return a pointer - * to the record itself instead of a pointer to the SHMQueue field - * of the record. It takes an extra parameter and does some extra - * pointer arithmetic to do this correctly. - * - * NOTE: These are set up so they can be turned into macros some day. - * - *------------------------------------------------------------------------- - */ -#include "postgres.h" - -#include "storage/shmem.h" - - -/* - * ShmemQueueInit -- make the head of a new queue point - * to itself - */ -void -SHMQueueInit(SHM_QUEUE *queue) -{ - Assert(ShmemAddrIsValid(queue)); - queue->prev = queue->next = queue; -} - -/* - * SHMQueueIsDetached -- true if element is not currently - * in a queue. - */ -bool -SHMQueueIsDetached(const SHM_QUEUE *queue) -{ - Assert(ShmemAddrIsValid(queue)); - return (queue->prev == NULL); -} - -/* - * SHMQueueElemInit -- clear an element's links - */ -void -SHMQueueElemInit(SHM_QUEUE *queue) -{ - Assert(ShmemAddrIsValid(queue)); - queue->prev = queue->next = NULL; -} - -/* - * SHMQueueDelete -- remove an element from the queue and - * close the links - */ -void -SHMQueueDelete(SHM_QUEUE *queue) -{ - SHM_QUEUE *nextElem = queue->next; - SHM_QUEUE *prevElem = queue->prev; - - Assert(ShmemAddrIsValid(queue)); - Assert(ShmemAddrIsValid(nextElem)); - Assert(ShmemAddrIsValid(prevElem)); - - prevElem->next = queue->next; - nextElem->prev = queue->prev; - - queue->prev = queue->next = NULL; -} - -/* - * SHMQueueInsertBefore -- put elem in queue before the given queue - * element. Inserting "before" the queue head puts the elem - * at the tail of the queue. - */ -void -SHMQueueInsertBefore(SHM_QUEUE *queue, SHM_QUEUE *elem) -{ - SHM_QUEUE *prevPtr = queue->prev; - - Assert(ShmemAddrIsValid(queue)); - Assert(ShmemAddrIsValid(elem)); - - elem->next = prevPtr->next; - elem->prev = queue->prev; - queue->prev = elem; - prevPtr->next = elem; -} - -/* - * SHMQueueInsertAfter -- put elem in queue after the given queue - * element. Inserting "after" the queue head puts the elem - * at the head of the queue. - */ -void -SHMQueueInsertAfter(SHM_QUEUE *queue, SHM_QUEUE *elem) -{ - SHM_QUEUE *nextPtr = queue->next; - - Assert(ShmemAddrIsValid(queue)); - Assert(ShmemAddrIsValid(elem)); - - elem->prev = nextPtr->prev; - elem->next = queue->next; - queue->next = elem; - nextPtr->prev = elem; -} - -/*-------------------- - * SHMQueueNext -- Get the next element from a queue - * - * To start the iteration, pass the queue head as both queue and curElem. - * Returns NULL if no more elements. - * - * Next element is at curElem->next. If SHMQueue is part of - * a larger structure, we want to return a pointer to the - * whole structure rather than a pointer to its SHMQueue field. - * For example, - * struct { - * int stuff; - * SHMQueue elem; - * } ELEMType; - * When this element is in a queue, prevElem->next points at struct.elem. - * We subtract linkOffset to get the correct start address of the structure. - * - * calls to SHMQueueNext should take these parameters: - * &(queueHead), &(queueHead), offsetof(ELEMType, elem) - * or - * &(queueHead), &(curElem->elem), offsetof(ELEMType, elem) - *-------------------- - */ -Pointer -SHMQueueNext(const SHM_QUEUE *queue, const SHM_QUEUE *curElem, Size linkOffset) -{ - SHM_QUEUE *elemPtr = curElem->next; - - Assert(ShmemAddrIsValid(curElem)); - - if (elemPtr == queue) /* back to the queue head? */ - return NULL; - - return (Pointer) (((char *) elemPtr) - linkOffset); -} - -/*-------------------- - * SHMQueuePrev -- Get the previous element from a queue - * - * Same as SHMQueueNext, just starting at tail and moving towards head. - * All other comments and usage applies. - */ -Pointer -SHMQueuePrev(const SHM_QUEUE *queue, const SHM_QUEUE *curElem, Size linkOffset) -{ - SHM_QUEUE *elemPtr = curElem->prev; - - Assert(ShmemAddrIsValid(curElem)); - - if (elemPtr == queue) /* back to the queue head? */ - return NULL; - - return (Pointer) (((char *) elemPtr) - linkOffset); -} - -/* - * SHMQueueEmpty -- true if queue head is only element, false otherwise - */ -bool -SHMQueueEmpty(const SHM_QUEUE *queue) -{ - Assert(ShmemAddrIsValid(queue)); - - if (queue->prev == queue) - { - Assert(queue->next == queue); - return true; - } - return false; -} diff --git a/src/include/storage/shmem.h b/src/include/storage/shmem.h index ee9e441858..0e1fb2006c 100644 --- a/src/include/storage/shmem.h +++ b/src/include/storage/shmem.h @@ -24,13 +24,6 @@ #include "utils/hsearch.h" -/* shmqueue.c */ -typedef struct SHM_QUEUE -{ - struct SHM_QUEUE *prev; - struct SHM_QUEUE *next; -} SHM_QUEUE; - /* shmem.c */ extern void InitShmemAccess(void *seghdr); extern void InitShmemAllocation(void); @@ -63,19 +56,4 @@ typedef struct Size allocated_size; /* # bytes actually allocated */ } ShmemIndexEnt; -/* - * prototypes for functions in shmqueue.c - */ -extern void SHMQueueInit(SHM_QUEUE *queue); -extern void SHMQueueElemInit(SHM_QUEUE *queue); -extern void SHMQueueDelete(SHM_QUEUE *queue); -extern void SHMQueueInsertBefore(SHM_QUEUE *queue, SHM_QUEUE *elem); -extern void SHMQueueInsertAfter(SHM_QUEUE *queue, SHM_QUEUE *elem); -extern Pointer SHMQueueNext(const SHM_QUEUE *queue, const SHM_QUEUE *curElem, - Size linkOffset); -extern Pointer SHMQueuePrev(const SHM_QUEUE *queue, const SHM_QUEUE *curElem, - Size linkOffset); -extern bool SHMQueueEmpty(const SHM_QUEUE *queue); -extern bool SHMQueueIsDetached(const SHM_QUEUE *queue); - #endif /* SHMEM_H */ diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index 09316039e4..24510ac29e 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -2377,7 +2377,6 @@ SERIALIZABLEXIDTAG SERVICE_STATUS SERVICE_STATUS_HANDLE SERVICE_TABLE_ENTRY -SHM_QUEUE SID_AND_ATTRIBUTES SID_IDENTIFIER_AUTHORITY SID_NAME_USE