internal void FireOutcome(TransactionStatus statusArg) { lock (this) { if (statusArg == TransactionStatus.Committed) { if (DiagnosticTrace.Verbose) { TransactionCommittedTraceRecord.Trace(System.Transactions.SR.GetString("TraceSourceOletx"), this.TransactionTraceId); } this.status = TransactionStatus.Committed; } else if (statusArg == TransactionStatus.Aborted) { if (DiagnosticTrace.Warning) { TransactionAbortedTraceRecord.Trace(System.Transactions.SR.GetString("TraceSourceOletx"), this.TransactionTraceId); } this.status = TransactionStatus.Aborted; } else { if (DiagnosticTrace.Warning) { TransactionInDoubtTraceRecord.Trace(System.Transactions.SR.GetString("TraceSourceOletx"), this.TransactionTraceId); } this.status = TransactionStatus.InDoubt; } } if (this.InternalTransaction != null) { System.Transactions.InternalTransaction.DistributedTransactionOutcome(this.InternalTransaction, this.status); } }
internal override void EnterState(InternalTransaction tx) { base.EnterState(tx); if (tx.phase1Volatiles.VolatileDemux != null) { tx.phase1Volatiles.VolatileDemux.BroadcastCommitted(ref tx.phase1Volatiles); } if (tx.phase0Volatiles.VolatileDemux != null) { tx.phase0Volatiles.VolatileDemux.BroadcastCommitted(ref tx.phase0Volatiles); } tx.FireCompletion(); if (DiagnosticTrace.Verbose) { TransactionCommittedTraceRecord.Trace(System.Transactions.SR.GetString("TraceSourceLtm"), tx.TransactionTraceId); } }
internal override void EnterState(InternalTransaction tx) { base.EnterState(tx); base.CommonEnterState(tx); for (int i = 0; i < tx.phase0Volatiles.volatileEnlistmentCount; i++) { tx.phase0Volatiles.volatileEnlistments[i].twoPhaseState.InternalCommitted(tx.phase0Volatiles.volatileEnlistments[i]); } for (int j = 0; j < tx.phase1Volatiles.volatileEnlistmentCount; j++) { tx.phase1Volatiles.volatileEnlistments[j].twoPhaseState.InternalCommitted(tx.phase1Volatiles.volatileEnlistments[j]); } TransactionManager.TransactionTable.Remove(tx); if (DiagnosticTrace.Verbose) { TransactionCommittedTraceRecord.Trace(System.Transactions.SR.GetString("TraceSourceLtm"), tx.TransactionTraceId); } tx.FireCompletion(); if (tx.asyncCommit) { tx.SignalAsyncCompletion(); } }