internal static void DistributedTransactionOutcome(InternalTransaction tx, TransactionStatus status)
{
FinalizedObject finalizedObject = null;
lock (tx)
{
if (tx.innerException == null)
{
tx.innerException = tx.PromotedTransaction.InnerException;
}
switch (status)
{
case TransactionStatus.Committed:
tx.State.ChangeStatePromotedCommitted(tx);
break;
case TransactionStatus.Aborted:
tx.State.ChangeStatePromotedAborted(tx);
break;
case TransactionStatus.InDoubt:
tx.State.InDoubtFromDtc(tx);
break;
default:
TransactionException.CreateInvalidOperationException(System.Transactions.SR.GetString("TraceSourceLtm"), "", null);
break;
}
finalizedObject = tx.finalizedObject;
}
if (finalizedObject != null)
{
finalizedObject.Dispose();
}
}