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

◆ EnterState()

override void System.Transactions.TransactionStatePromoted.EnterState ( InternalTransaction tx)
inlinepackage

Definition at line 8 of file TransactionStatePromoted.cs.

9 {
10 tx.SetPromoterTypeToMSDTC();
11 if (tx._outcomeSource._isoLevel == IsolationLevel.Snapshot)
12 {
13 throw TransactionException.CreateInvalidOperationException(TraceSourceType.TraceSourceLtm, System.SR.CannotPromoteSnapshot, null);
14 }
16 DistributedCommittableTransaction distributedCommittableTransaction = null;
17 try
18 {
19 TimeSpan timeSpan;
20 if (tx.AbsoluteTimeout == long.MaxValue)
21 {
22 timeSpan = TimeSpan.Zero;
23 }
24 else
25 {
26 timeSpan = TransactionManager.TransactionTable.RecalcTimeout(tx);
27 if (timeSpan <= TimeSpan.Zero)
28 {
29 return;
30 }
31 }
32 TransactionOptions options = default(TransactionOptions);
33 options.IsolationLevel = tx._outcomeSource._isoLevel;
34 options.Timeout = timeSpan;
35 distributedCommittableTransaction = TransactionManager.DistributedTransactionManager.CreateTransaction(options);
36 distributedCommittableTransaction.SavedLtmPromotedTransaction = tx._outcomeSource;
37 TransactionsEtwProvider log = TransactionsEtwProvider.Log;
38 if (log.IsEnabled())
39 {
40 log.TransactionPromoted(tx.TransactionTraceId, distributedCommittableTransaction.TransactionTraceId);
41 }
42 }
43 catch (TransactionException innerException)
44 {
45 TransactionException exception = (TransactionException)(tx._innerException = innerException);
46 TransactionsEtwProvider log2 = TransactionsEtwProvider.Log;
47 if (log2.IsEnabled())
48 {
49 log2.ExceptionConsumed(exception);
50 }
51 return;
52 }
53 finally
54 {
55 if (distributedCommittableTransaction == null)
56 {
57 tx.State.ChangeStateAbortedDuringPromotion(tx);
58 }
59 }
60 tx.PromotedTransaction = distributedCommittableTransaction;
61 Hashtable promotedTransactionTable = TransactionManager.PromotedTransactionTable;
62 lock (promotedTransactionTable)
63 {
64 tx._finalizedObject = new FinalizedObject(tx, distributedCommittableTransaction.Identifier);
65 WeakReference value = new WeakReference(tx._outcomeSource, trackResurrection: false);
66 promotedTransactionTable[distributedCommittableTransaction.Identifier] = value;
67 }
68 TransactionManager.FireDistributedTransactionStarted(tx._outcomeSource);
70 }
static string CannotPromoteSnapshot
Definition SR.cs:20
Definition SR.cs:7
virtual void PromoteEnlistmentsAndOutcome(InternalTransaction tx)
void CommonEnterState(InternalTransaction tx)

References System.Transactions.InternalTransaction._innerException, System.Transactions.Transaction._isoLevel, System.Transactions.InternalTransaction._outcomeSource, System.Transactions.InternalTransaction.AbsoluteTimeout, System.SR.CannotPromoteSnapshot, System.Transactions.TransactionState.ChangeStateAbortedDuringPromotion(), System.Transactions.TransactionState.CommonEnterState(), System.Transactions.TransactionException.CreateInvalidOperationException(), System.Transactions.TransactionManager.DistributedTransactionManager, 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.options, System.Transactions.TransactionManager.PromotedTransactionTable, System.Transactions.TransactionStatePromoted.PromoteEnlistmentsAndOutcome(), System.Transactions.InternalTransaction.SetPromoterTypeToMSDTC(), System.Transactions.InternalTransaction.State, System.Transactions.TransactionException, System.Transactions.TransactionsEtwProvider.TransactionPromoted(), System.Transactions.TransactionManager.TransactionTable, System.Transactions.Distributed.DistributedTransaction.TransactionTraceId, System.Transactions.InternalTransaction.TransactionTraceId, System.value, and System.TimeSpan.Zero.