internal InternalTransaction(TimeSpan timeout, CommittableTransaction committableTransaction)
{
// Calculate the absolute timeout for this transaction
_absoluteTimeout = TransactionManager.TransactionTable.TimeoutTicks(timeout);
// Start the transaction off as active
TransactionState.TransactionStateActive.EnterState(this);
// Until otherwise noted this transaction uses normal promotion.
_promoteState = TransactionState.TransactionStatePromoted;
// Keep a reference to the commitable transaction
_committableTransaction = committableTransaction;
_outcomeSource = committableTransaction;
// Initialize the hash
_transactionHash = TransactionManager.TransactionTable.Add(this);
}