aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/transam/xact.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/transam/xact.c')
-rw-r--r--src/backend/access/transam/xact.c32
1 files changed, 14 insertions, 18 deletions
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index bb1f1069463..adf763a8ea4 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -2983,24 +2983,20 @@ StartTransactionCommand(void)
* GUC system resets the characteristics at transaction end, so for example
* just skipping the reset in StartTransaction() won't work.)
*/
-static int save_XactIsoLevel;
-static bool save_XactReadOnly;
-static bool save_XactDeferrable;
-
void
-SaveTransactionCharacteristics(void)
+SaveTransactionCharacteristics(SavedTransactionCharacteristics *s)
{
- save_XactIsoLevel = XactIsoLevel;
- save_XactReadOnly = XactReadOnly;
- save_XactDeferrable = XactDeferrable;
+ s->save_XactIsoLevel = XactIsoLevel;
+ s->save_XactReadOnly = XactReadOnly;
+ s->save_XactDeferrable = XactDeferrable;
}
void
-RestoreTransactionCharacteristics(void)
+RestoreTransactionCharacteristics(const SavedTransactionCharacteristics *s)
{
- XactIsoLevel = save_XactIsoLevel;
- XactReadOnly = save_XactReadOnly;
- XactDeferrable = save_XactDeferrable;
+ XactIsoLevel = s->save_XactIsoLevel;
+ XactReadOnly = s->save_XactReadOnly;
+ XactDeferrable = s->save_XactDeferrable;
}
@@ -3011,9 +3007,9 @@ void
CommitTransactionCommand(void)
{
TransactionState s = CurrentTransactionState;
+ SavedTransactionCharacteristics savetc;
- if (s->chain)
- SaveTransactionCharacteristics();
+ SaveTransactionCharacteristics(&savetc);
switch (s->blockState)
{
@@ -3071,7 +3067,7 @@ CommitTransactionCommand(void)
StartTransaction();
s->blockState = TBLOCK_INPROGRESS;
s->chain = false;
- RestoreTransactionCharacteristics();
+ RestoreTransactionCharacteristics(&savetc);
}
break;
@@ -3097,7 +3093,7 @@ CommitTransactionCommand(void)
StartTransaction();
s->blockState = TBLOCK_INPROGRESS;
s->chain = false;
- RestoreTransactionCharacteristics();
+ RestoreTransactionCharacteristics(&savetc);
}
break;
@@ -3115,7 +3111,7 @@ CommitTransactionCommand(void)
StartTransaction();
s->blockState = TBLOCK_INPROGRESS;
s->chain = false;
- RestoreTransactionCharacteristics();
+ RestoreTransactionCharacteristics(&savetc);
}
break;
@@ -3182,7 +3178,7 @@ CommitTransactionCommand(void)
StartTransaction();
s->blockState = TBLOCK_INPROGRESS;
s->chain = false;
- RestoreTransactionCharacteristics();
+ RestoreTransactionCharacteristics(&savetc);
}
}
else if (s->blockState == TBLOCK_PREPARE)