Hi all

As a result of some recent work on Windows I have a list of PGDLLIMPORTs
I'd like to add to existing exported globals.

All affected variables are already extern, so this doesn't expose any new
API not already available to non-Windows extensions.

I've split the patch up for clarity:

* v1-0001: PGDLLIMPORTs for xlog.c's XactLastRecEnd, ProcLastRecPtr and
reachedConsistency . I only really need XactLastRecEnd but think it's
sensible to expose all of them.

* v1-0002: PGDLLIMPORT for struct WalRecv . Allows extensions to observe
WAL receiver state and behaviour.

* v1-0003: PGDLLIMPORT criticalSharedRelcachesBuilt and
criticalRelcachesBuilt . I only really need criticalSharedRelcachesBuilt
but it seems sensible to export both. Useful when extension code may run
during early startup (_PG_init in shared_preload_libraries, shmem init,
etc) and later during normal running.

* v1-0004: PGDLLIMPORT a set of useful GUCs and vars containing GUC-derived
state in xlog.h and walreceiver.h

I will follow up soon with a patch that marks every GUC as PGDLLIMPORT
including any vars derived from the GUC by hooks. I don't see much point
doing this piecemeal since they're all externs anyway. That patch will
replace patch 4 above, but not patches 1-3.

I'd love to see these PGDLLIMPORTs backported to pg13.
From f4c1abfbfc33ad95b5c216f1fcf132938c6377bc Mon Sep 17 00:00:00 2001
From: Craig Ringer <craig.rin...@2ndquadrant.com>
Date: Thu, 17 Jun 2021 11:46:17 +0800
Subject: [PATCH v1 1/5] Make xlog.c vars PGDLLIMPORT

Allow extensions to see XactLastRecEnd, ProcLastRecPtr and
reachedConsistency.
---
 src/include/access/xlog.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h
index 77187c12be..e0b3a75d4d 100644
--- a/src/include/access/xlog.h
+++ b/src/include/access/xlog.h
@@ -97,11 +97,11 @@ typedef enum
 	RECOVERY_TARGET_TIMELINE_NUMERIC
 } RecoveryTargetTimeLineGoal;
 
-extern XLogRecPtr ProcLastRecPtr;
-extern XLogRecPtr XactLastRecEnd;
+extern PGDLLIMPORT XLogRecPtr ProcLastRecPtr;
+extern PGDLLIMPORT XLogRecPtr XactLastRecEnd;
 extern PGDLLIMPORT XLogRecPtr XactLastCommitEnd;
 
-extern bool reachedConsistency;
+extern PGDLLIMPORT bool reachedConsistency;
 
 /* these variables are GUC parameters related to XLOG */
 extern int	wal_segment_size;
-- 
2.31.1

From 9284627abdcee2b851531a55f82288a73285c9fd Mon Sep 17 00:00:00 2001
From: Craig Ringer <craig.rin...@2ndquadrant.com>
Date: Thu, 17 Jun 2021 11:47:18 +0800
Subject: [PATCH v1 2/5] Make struct WalRecv PGDLLIMPORT for extensions

This allows extensions on a standby to observe the state of the wal
receiver.
---
 src/include/replication/walreceiver.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/include/replication/walreceiver.h b/src/include/replication/walreceiver.h
index 4fd7c25ea7..016814658e 100644
--- a/src/include/replication/walreceiver.h
+++ b/src/include/replication/walreceiver.h
@@ -160,7 +160,7 @@ typedef struct
 	sig_atomic_t force_reply;	/* used as a bool */
 } WalRcvData;
 
-extern WalRcvData *WalRcv;
+extern PGDLLIMPORT WalRcvData *WalRcv;
 
 typedef struct
 {
-- 
2.31.1

From 6ef9e486e829b9e96a622bf60d2fe6a7044a6321 Mon Sep 17 00:00:00 2001
From: Craig Ringer <craig.rin...@2ndquadrant.com>
Date: Thu, 17 Jun 2021 11:50:11 +0800
Subject: [PATCH v1 3/5] PGDLLIMPORT criticalSharedRelcachesBuilt and
 criticalRelcachesBuilt

Allow extensions to see the state of relcache init so they can tell if
relcache access is safe. Useful for extensions that register at
shared_preload_libraries time.
---
 src/include/utils/relcache.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/include/utils/relcache.h b/src/include/utils/relcache.h
index f772855ac6..202f2b10d9 100644
--- a/src/include/utils/relcache.h
+++ b/src/include/utils/relcache.h
@@ -145,9 +145,9 @@ extern void RelationCacheInitFilePostInvalidate(void);
 extern void RelationCacheInitFileRemove(void);
 
 /* should be used only by relcache.c and catcache.c */
-extern bool criticalRelcachesBuilt;
+extern PGDLLIMPORT bool criticalRelcachesBuilt;
 
 /* should be used only by relcache.c and postinit.c */
-extern bool criticalSharedRelcachesBuilt;
+extern PGDLLIMPORT bool criticalSharedRelcachesBuilt;
 
 #endif							/* RELCACHE_H */
-- 
2.31.1

From f5bc0d2fc74eb2855196f7aa02295d29059f742f Mon Sep 17 00:00:00 2001
From: Craig Ringer <craig.rin...@2ndquadrant.com>
Date: Thu, 17 Jun 2021 11:53:21 +0800
Subject: [PATCH v1 4/5] PGDLLIMPORT a set of useful GUCs and derived variables

---
 src/include/access/xlog.h             | 76 +++++++++++++--------------
 src/include/replication/walreceiver.h |  6 +--
 2 files changed, 41 insertions(+), 41 deletions(-)

diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h
index e0b3a75d4d..3a6dbbaef4 100644
--- a/src/include/access/xlog.h
+++ b/src/include/access/xlog.h
@@ -104,47 +104,47 @@ extern PGDLLIMPORT XLogRecPtr XactLastCommitEnd;
 extern PGDLLIMPORT bool reachedConsistency;
 
 /* these variables are GUC parameters related to XLOG */
-extern int	wal_segment_size;
-extern int	min_wal_size_mb;
-extern int	max_wal_size_mb;
-extern int	wal_keep_size_mb;
-extern int	max_slot_wal_keep_size_mb;
-extern int	XLOGbuffers;
-extern int	XLogArchiveTimeout;
-extern int	wal_retrieve_retry_interval;
-extern char *XLogArchiveCommand;
-extern bool EnableHotStandby;
-extern bool fullPageWrites;
-extern bool wal_log_hints;
-extern bool wal_compression;
-extern bool wal_init_zero;
-extern bool wal_recycle;
-extern bool *wal_consistency_checking;
-extern char *wal_consistency_checking_string;
-extern bool log_checkpoints;
-extern char *recoveryRestoreCommand;
-extern char *recoveryEndCommand;
-extern char *archiveCleanupCommand;
-extern bool recoveryTargetInclusive;
-extern int	recoveryTargetAction;
-extern int	recovery_min_apply_delay;
-extern char *PrimaryConnInfo;
-extern char *PrimarySlotName;
-extern bool wal_receiver_create_temp_slot;
-extern bool track_wal_io_timing;
+extern PGDLLIMPORT int	wal_segment_size;
+extern PGDLLIMPORT int	min_wal_size_mb;
+extern PGDLLIMPORT int	max_wal_size_mb;
+extern PGDLLIMPORT int	wal_keep_size_mb;
+extern PGDLLIMPORT int	max_slot_wal_keep_size_mb;
+extern PGDLLIMPORT int	XLOGbuffers;
+extern PGDLLIMPORT int	XLogArchiveTimeout;
+extern PGDLLIMPORT int	wal_retrieve_retry_interval;
+extern PGDLLIMPORT char *XLogArchiveCommand;
+extern PGDLLIMPORT bool EnableHotStandby;
+extern PGDLLIMPORT bool fullPageWrites;
+extern PGDLLIMPORT bool wal_log_hints;
+extern PGDLLIMPORT bool wal_compression;
+extern PGDLLIMPORT bool wal_init_zero;
+extern PGDLLIMPORT bool wal_recycle;
+extern PGDLLIMPORT bool *wal_consistency_checking;
+extern PGDLLIMPORT char *wal_consistency_checking_string;
+extern PGDLLIMPORT bool log_checkpoints;
+extern PGDLLIMPORT char *recoveryRestoreCommand;
+extern PGDLLIMPORT char *recoveryEndCommand;
+extern PGDLLIMPORT char *archiveCleanupCommand;
+extern PGDLLIMPORT bool recoveryTargetInclusive;
+extern PGDLLIMPORT int	recoveryTargetAction;
+extern PGDLLIMPORT int	recovery_min_apply_delay;
+extern PGDLLIMPORT char *PrimaryConnInfo;
+extern PGDLLIMPORT char *PrimarySlotName;
+extern PGDLLIMPORT bool wal_receiver_create_temp_slot;
+extern PGDLLIMPORT bool track_wal_io_timing;
 
 /* indirectly set via GUC system */
-extern TransactionId recoveryTargetXid;
-extern char *recovery_target_time_string;
-extern const char *recoveryTargetName;
-extern XLogRecPtr recoveryTargetLSN;
-extern RecoveryTargetType recoveryTarget;
-extern char *PromoteTriggerFile;
-extern RecoveryTargetTimeLineGoal recoveryTargetTimeLineGoal;
-extern TimeLineID recoveryTargetTLIRequested;
-extern TimeLineID recoveryTargetTLI;
+extern PGDLLIMPORT TransactionId recoveryTargetXid;
+extern PGDLLIMPORT char *recovery_target_time_string;
+extern PGDLLIMPORT const char *recoveryTargetName;
+extern PGDLLIMPORT XLogRecPtr recoveryTargetLSN;
+extern PGDLLIMPORT RecoveryTargetType recoveryTarget;
+extern PGDLLIMPORT char *PromoteTriggerFile;
+extern PGDLLIMPORT RecoveryTargetTimeLineGoal recoveryTargetTimeLineGoal;
+extern PGDLLIMPORT TimeLineID recoveryTargetTLIRequested;
+extern PGDLLIMPORT TimeLineID recoveryTargetTLI;
 
-extern int	CheckPointSegments;
+extern PGDLLIMPORT int	CheckPointSegments;
 
 /* option set locally in startup process only when signal files exist */
 extern bool StandbyModeRequested;
diff --git a/src/include/replication/walreceiver.h b/src/include/replication/walreceiver.h
index 016814658e..cb71eaed09 100644
--- a/src/include/replication/walreceiver.h
+++ b/src/include/replication/walreceiver.h
@@ -25,9 +25,9 @@
 #include "utils/tuplestore.h"
 
 /* user-settable parameters */
-extern int	wal_receiver_status_interval;
-extern int	wal_receiver_timeout;
-extern bool hot_standby_feedback;
+extern PGDLLIMPORT int	wal_receiver_status_interval;
+extern PGDLLIMPORT int	wal_receiver_timeout;
+extern PGDLLIMPORT bool hot_standby_feedback;
 
 /*
  * MAXCONNINFO: maximum size of a connection string.
-- 
2.31.1

Reply via email to