1 | /*------------------------------------------------------------------------- |
2 | * |
3 | * proclist_types.h |
4 | * doubly-linked lists of pgprocnos |
5 | * |
6 | * See proclist.h for functions that operate on these types. |
7 | * |
8 | * Portions Copyright (c) 2016-2019, PostgreSQL Global Development Group |
9 | * |
10 | * IDENTIFICATION |
11 | * src/include/storage/proclist_types.h |
12 | *------------------------------------------------------------------------- |
13 | */ |
14 | |
15 | #ifndef PROCLIST_TYPES_H |
16 | #define PROCLIST_TYPES_H |
17 | |
18 | /* |
19 | * A node in a doubly-linked list of processes. The link fields contain |
20 | * the 0-based PGPROC indexes of the next and previous process, or |
21 | * INVALID_PGPROCNO in the next-link of the last node and the prev-link |
22 | * of the first node. A node that is currently not in any list |
23 | * should have next == prev == 0; this is not a possible state for a node |
24 | * that is in a list, because we disallow circularity. |
25 | */ |
26 | typedef struct proclist_node |
27 | { |
28 | int next; /* pgprocno of the next PGPROC */ |
29 | int prev; /* pgprocno of the prev PGPROC */ |
30 | } proclist_node; |
31 | |
32 | /* |
33 | * Header of a doubly-linked list of PGPROCs, identified by pgprocno. |
34 | * An empty list is represented by head == tail == INVALID_PGPROCNO. |
35 | */ |
36 | typedef struct proclist_head |
37 | { |
38 | int head; /* pgprocno of the head PGPROC */ |
39 | int tail; /* pgprocno of the tail PGPROC */ |
40 | } proclist_head; |
41 | |
42 | /* |
43 | * List iterator allowing some modifications while iterating. |
44 | */ |
45 | typedef struct proclist_mutable_iter |
46 | { |
47 | int cur; /* pgprocno of the current PGPROC */ |
48 | int next; /* pgprocno of the next PGPROC */ |
49 | } proclist_mutable_iter; |
50 | |
51 | #endif /* PROCLIST_TYPES_H */ |
52 | |