summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorTom Lane2022-02-28 17:54:12 +0000
committerTom Lane2022-02-28 17:54:12 +0000
commit12d768e70497afc5a57acf73c251316997b5175a (patch)
tree129fc68a13e888875e85770beda5cddd6de775d7 /src/include
parent2e517818f4af4abe93bf56442469944544f10d4b (diff)
Don't use static storage for SaveTransactionCharacteristics().
This is pretty queasy-making on general principles, and the more so once you notice that CommitTransactionCommand() is actually stomping on the values saved by _SPI_commit(). It's okay as long as the active values didn't change during HoldPinnedPortals(); but that's a larger assumption than I think we want to make, especially since the fix is so simple. Discussion: https://postgr.es/m/1533956.1645731245@sss.pgh.pa.us
Diffstat (limited to 'src/include')
-rw-r--r--src/include/access/xact.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/include/access/xact.h b/src/include/access/xact.h
index 17a6fa4abdb..062cc7e17d8 100644
--- a/src/include/access/xact.h
+++ b/src/include/access/xact.h
@@ -135,6 +135,14 @@ typedef enum
typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid,
SubTransactionId parentSubid, void *arg);
+/* Data structure for Save/RestoreTransactionCharacteristics */
+typedef struct SavedTransactionCharacteristics
+{
+ int save_XactIsoLevel;
+ bool save_XactReadOnly;
+ bool save_XactDeferrable;
+} SavedTransactionCharacteristics;
+
/* ----------------
* transaction-related XLOG entries
@@ -399,8 +407,8 @@ extern bool TransactionIdIsCurrentTransactionId(TransactionId xid);
extern void CommandCounterIncrement(void);
extern void ForceSyncCommit(void);
extern void StartTransactionCommand(void);
-extern void SaveTransactionCharacteristics(void);
-extern void RestoreTransactionCharacteristics(void);
+extern void SaveTransactionCharacteristics(SavedTransactionCharacteristics *s);
+extern void RestoreTransactionCharacteristics(const SavedTransactionCharacteristics *s);
extern void CommitTransactionCommand(void);
extern void AbortCurrentTransaction(void);
extern void BeginTransactionBlock(void);