internal override void Timeout(InternalTransaction tx)
{
// LTM gives up the ability to control Tx timeout when it promotes.
try
{
if (tx._innerException == null)
{
tx._innerException = new TimeoutException(SR.TraceTransactionTimeout); ;
}
tx.PromotedTransaction.Rollback();
TransactionsEtwProvider etwLog = TransactionsEtwProvider.Log;
if (etwLog.IsEnabled())
{
etwLog.TransactionTimeout(tx.TransactionTraceId);
}
}
catch (TransactionException te)
{
// This could fail for any number of reasons based on the state of the transaction.
// The Ltm tries anyway because PSPE transactions have no timeout specified and some
// distributed transaction managers may not honer the timeout correctly.
// The exception needs to be caught because we don't want it to go unhandled on the
// timer thread.
TransactionsEtwProvider etwLog = TransactionsEtwProvider.Log;
if (etwLog.IsEnabled())
{
etwLog.ExceptionConsumed(te);
}
}
}