From c4409afd467abf9c560879245018f4024a41d3c8 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sun, 16 Jun 2024 21:33:43 +0200 Subject: [PATCH v2 04/10] Improve some global variable declarations We have in launch_backend.c: /* * The following need to be available to the save/restore_backend_variables * functions. They are marked NON_EXEC_STATIC in their home modules. */ extern slock_t *ShmemLock; extern slock_t *ProcStructLock; extern PGPROC *AuxiliaryProcs; extern PMSignalData *PMSignalState; extern pg_time_t first_syslogger_file_time; extern struct bkend *ShmemBackendArray; extern bool redirection_done; That comment is not completely true: ShmemLock, ShmemBackendArray, and redirection_done are not in fact NON_EXEC_STATIC. ShmemLock once was, but was then needed elsewhere. ShmemBackendArray was static inside postmaster.c before launch_backend.c was created. redirection_done was never static. This patch moves the declaration of ShmemLock and redirection_done to a header file. ShmemBackendArray gets a NON_EXEC_STATIC. This doesn't make a difference, since it only exists if EXEC_BACKEND anyway, but it makes it consistent. After that, the comment is now correct. Discussion: https://www.postgresql.org/message-id/flat/e0a62134-83da-4ba4-8cdb-ceb0111c95ce@eisentraut.org --- src/backend/postmaster/launch_backend.c | 2 -- src/backend/postmaster/postmaster.c | 2 +- src/backend/postmaster/syslogger.c | 2 -- src/backend/storage/lmgr/lwlock.c | 4 +--- src/backend/utils/error/elog.c | 2 -- src/include/postmaster/postmaster.h | 1 + src/include/storage/shmem.h | 2 ++ 7 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/backend/postmaster/launch_backend.c b/src/backend/postmaster/launch_backend.c index bb1b0ac2b9c..49e4be4b399 100644 --- a/src/backend/postmaster/launch_backend.c +++ b/src/backend/postmaster/launch_backend.c @@ -672,13 +672,11 @@ SubPostmasterMain(int argc, char *argv[]) * The following need to be available to the save/restore_backend_variables * functions. They are marked NON_EXEC_STATIC in their home modules. */ -extern slock_t *ShmemLock; extern slock_t *ProcStructLock; extern PGPROC *AuxiliaryProcs; extern PMSignalData *PMSignalState; extern pg_time_t first_syslogger_file_time; extern struct bkend *ShmemBackendArray; -extern bool redirection_done; #ifndef WIN32 #define write_inheritable_socket(dest, src, childpid) ((*(dest) = (src)), true) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index bf0241aed0c..97c8332c84d 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -179,7 +179,7 @@ typedef struct bkend static dlist_head BackendList = DLIST_STATIC_INIT(BackendList); #ifdef EXEC_BACKEND -Backend *ShmemBackendArray; +NON_EXEC_STATIC Backend *ShmemBackendArray; #endif BackgroundWorker *MyBgworkerEntry = NULL; diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c index 437947dbb9d..7951599fa87 100644 --- a/src/backend/postmaster/syslogger.c +++ b/src/backend/postmaster/syslogger.c @@ -75,8 +75,6 @@ char *Log_filename = NULL; bool Log_truncate_on_rotation = false; int Log_file_mode = S_IRUSR | S_IWUSR; -extern bool redirection_done; - /* * Private state */ diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c index b1e388dc7c9..e765754d805 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -91,9 +91,6 @@ #endif -/* We use the ShmemLock spinlock to protect LWLockCounter */ -extern slock_t *ShmemLock; - #define LW_FLAG_HAS_WAITERS ((uint32) 1 << 30) #define LW_FLAG_RELEASE_OK ((uint32) 1 << 29) #define LW_FLAG_LOCKED ((uint32) 1 << 28) @@ -609,6 +606,7 @@ LWLockNewTrancheId(void) int *LWLockCounter; LWLockCounter = (int *) ((char *) MainLWLockArray - sizeof(int)); + /* We use the ShmemLock spinlock to protect LWLockCounter */ SpinLockAcquire(ShmemLock); result = (*LWLockCounter)++; SpinLockRelease(ShmemLock); diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index d91a85cb2d7..e9077714211 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -95,8 +95,6 @@ ErrorContextCallback *error_context_stack = NULL; sigjmp_buf *PG_exception_stack = NULL; -extern bool redirection_done; - /* * Hook for intercepting messages before they are sent to the server log. * Note that the hook will not get called for messages that are suppressed diff --git a/src/include/postmaster/postmaster.h b/src/include/postmaster/postmaster.h index 89ad13b788b..9feb2e4de14 100644 --- a/src/include/postmaster/postmaster.h +++ b/src/include/postmaster/postmaster.h @@ -52,6 +52,7 @@ extern PGDLLIMPORT int postmaster_alive_fds[2]; extern PGDLLIMPORT const char *progname; +extern PGDLLIMPORT bool redirection_done; extern PGDLLIMPORT bool LoadedSSL; extern void PostmasterMain(int argc, char *argv[]) pg_attribute_noreturn(); diff --git a/src/include/storage/shmem.h b/src/include/storage/shmem.h index 3b0cc9d3800..842989111c3 100644 --- a/src/include/storage/shmem.h +++ b/src/include/storage/shmem.h @@ -21,10 +21,12 @@ #ifndef SHMEM_H #define SHMEM_H +#include "storage/spin.h" #include "utils/hsearch.h" /* shmem.c */ +extern PGDLLIMPORT slock_t *ShmemLock; extern void InitShmemAccess(void *seghdr); extern void InitShmemAllocation(void); extern void *ShmemAlloc(Size size); -- 2.45.2