Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ EnterState()

override void System.Transactions.TransactionStateDelegatedBase.EnterState ( InternalTransaction tx)
inlinepackageinherited

Definition at line 8 of file TransactionStateDelegatedBase.cs.

9 {
10 if (tx._outcomeSource._isoLevel == IsolationLevel.Snapshot)
11 {
12 throw TransactionException.CreateInvalidOperationException(TraceSourceType.TraceSourceLtm, System.SR.CannotPromoteSnapshot, null, tx?.DistributedTxId ?? Guid.Empty);
13 }
15 DistributedTransaction distributedTransaction = null;
16 try
17 {
18 if (tx._durableEnlistment != null)
19 {
20 TransactionsEtwProvider log = TransactionsEtwProvider.Log;
21 if (log.IsEnabled())
22 {
23 log.EnlistmentStatus(tx._durableEnlistment, NotificationCall.Promote);
24 }
25 }
26 distributedTransaction = TransactionState.TransactionStatePSPEOperation.PSPEPromote(tx);
27 }
28 catch (TransactionPromotionException innerException)
29 {
30 TransactionPromotionException exception = (TransactionPromotionException)(tx._innerException = innerException);
31 TransactionsEtwProvider log2 = TransactionsEtwProvider.Log;
32 if (log2.IsEnabled())
33 {
34 log2.ExceptionConsumed(exception);
35 }
36 }
37 finally
38 {
39 if (distributedTransaction == null)
40 {
41 tx.State.ChangeStateAbortedDuringPromotion(tx);
42 }
43 }
44 if (distributedTransaction != null && tx.PromotedTransaction != distributedTransaction)
45 {
46 tx.PromotedTransaction = distributedTransaction;
47 Hashtable promotedTransactionTable = TransactionManager.PromotedTransactionTable;
48 lock (promotedTransactionTable)
49 {
50 tx._finalizedObject = new FinalizedObject(tx, tx.PromotedTransaction.Identifier);
51 WeakReference value = new WeakReference(tx._outcomeSource, trackResurrection: false);
52 promotedTransactionTable[tx.PromotedTransaction.Identifier] = value;
53 }
54 TransactionManager.FireDistributedTransactionStarted(tx._outcomeSource);
55 TransactionsEtwProvider log3 = TransactionsEtwProvider.Log;
56 if (log3.IsEnabled())
57 {
58 log3.TransactionPromoted(tx.TransactionTraceId, distributedTransaction.TransactionTraceId);
59 }
61 }
62 }
static string CannotPromoteSnapshot
Definition SR.cs:20
Definition SR.cs:7
virtual void PromoteEnlistmentsAndOutcome(InternalTransaction tx)
void CommonEnterState(InternalTransaction tx)

References System.Transactions.InternalTransaction._durableEnlistment, System.Transactions.InternalTransaction._innerException, System.Transactions.Transaction._isoLevel, System.Transactions.InternalTransaction._outcomeSource, System.SR.CannotPromoteSnapshot, System.Transactions.TransactionState.ChangeStateAbortedDuringPromotion(), System.Transactions.TransactionState.CommonEnterState(), System.Transactions.TransactionException.CreateInvalidOperationException(), System.Transactions.InternalTransaction.DistributedTxId, System.Guid.Empty, System.Transactions.TransactionsEtwProvider.EnlistmentStatus(), System.exception, System.Transactions.TransactionsEtwProvider.ExceptionConsumed(), System.Transactions.TransactionManager.FireDistributedTransactionStarted(), System.Transactions.Distributed.DistributedTransaction.Identifier, System.Diagnostics.Tracing.EventSource.IsEnabled(), System.Transactions.TransactionsEtwProvider.Log, System.Transactions.InternalTransaction.PromotedTransaction, System.Transactions.TransactionManager.PromotedTransactionTable, System.Transactions.TransactionStatePromoted.PromoteEnlistmentsAndOutcome(), System.Transactions.InternalTransaction.State, System.Transactions.TransactionsEtwProvider.TransactionPromoted(), System.Transactions.TransactionState.TransactionStatePSPEOperation, System.Transactions.Distributed.DistributedTransaction.TransactionTraceId, System.Transactions.InternalTransaction.TransactionTraceId, and System.value.