Cleanup: PGProc->links doesn't need to be the first field anymore - Mailing list pgsql-hackers

From Heikki Linnakangas
Subject Cleanup: PGProc->links doesn't need to be the first field anymore
Date
Msg-id 22aa749e-cc1a-424a-b455-21325473a794@iki.fi
Whole thread Raw
Responses Re: Cleanup: PGProc->links doesn't need to be the first field anymore
Re: Cleanup: PGProc->links doesn't need to be the first field anymore
List pgsql-hackers
pgproc.h has this:

> struct PGPROC
> {
>     /* proc->links MUST BE FIRST IN STRUCT (see ProcSleep,ProcWakeup,etc) */
>     dlist_node    links;            /* list link if process is in a list */
>     dlist_head *procgloballist; /* procglobal list that owns this PGPROC */
> ...

I don't see any particular reason for 'links' to be the first field. We 
used to do things like "proc = (PGPROC *) waitQueue->links.next", but 
since commit 5764f611e1, this has been a "dlist", and dlist_container() 
can handle the list link being anywhere in the struct.

I tried moving it and ran the regression tests. That revealed one place 
where we still don't use dlist_container:

>     if (!dlist_is_empty(procgloballist))
>     {
>         MyProc = (PGPROC *) dlist_pop_head_node(procgloballist);
> ...

I believe that was just an oversight. Trivial patch attached.

-- 
Heikki Linnakangas
Neon (https://neon.tech)
Attachment

pgsql-hackers by date:

Previous
From: David Rowley
Date:
Subject: Re: Incorrect Assert in BufFileSize()?
Next
From: Noah Misch
Date:
Subject: Re: race condition in pg_class