mirror of
https://github.com/postgres/postgres.git
synced 2025-07-08 11:42:09 +03:00
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
This commit is contained in:
@ -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);
|
||||
|
Reference in New Issue
Block a user