What does HRESULT 0x8004D017 (XACT_E_NOTIMEOUT) mean?

 
Previous Next
XACT_E_INDOUBT XACT_E_ALREADYINPROGRESS

XACT_E_NOTIMEOUT

XACT_E_NOTIMEOUT is the failure HRESULT 0x8004D017 (signed decimal -2147168233, unsigned decimal 2147799063). Its severity bit is 1, facility is 4 (FACILITY_ITF), and the facility-specific code field is 0xD017.

A finite timeout was requested where only the implementation default is supported

This HRESULT reports that a timeout was specified but the transaction implementation does not support timeouts for that operation. Microsoft documents the same result for ITransactionLocal::StartTransaction when a noninfinite timeout is requested from a provider that cannot honor it.

AllStat records the Windows message as: “A time-out was specified, but time-outs are not supported.” This text should be interpreted at the transaction stage described below rather than as a generic COM failure.

The contract boundary to identify

The value rejects the requested timing contract before the caller can assume that the transaction will be automatically aborted at the chosen deadline. It does not mean the deadline elapsed; no timeout event is being reported.

Likely causes to separate

  • A finite timeout was placed in the transaction options object for a provider that accepts only its default or infinite behavior.
  • A framework propagates an ambient timeout into a local provider that does not implement it.
  • The caller confuses a command timeout with a transaction lifetime timeout.
  • A provider upgrade or fallback path changes which timeout capabilities are available.

Evidence worth preserving

  • Record the requested timeout, provider, session, isolation level, and transaction creation method.
  • Capture command and connection timeouts separately because they govern different stages.
  • Log the transaction options object after all framework defaults have been applied.
  • Verify whether the transaction was created at all before starting cleanup or retry logic.

Diagnostic sequence

  • Query or read the provider’s transaction-timeout support rather than assuming a common implementation across resources.
  • Repeat with the documented default or infinite setting and enforce an application deadline outside the unsupported transaction option.
  • Design cancellation so it explicitly aborts the transaction and waits for the outcome instead of merely abandoning the calling task.
  • Check that an outer COM+ timeout is not being confused with a local OLE DB transaction option.

Retry and recovery

Use a supported timeout configuration. If the application must enforce a shorter deadline, coordinate cancellation and explicit abort at a higher layer, then confirm final transaction status. Retrying the same unsupported timeout value cannot succeed.

What this HRESULT does not establish

The code does not indicate a slow resource or an expired transaction. It also does not guarantee that removing the timeout is operationally safe; an unbounded transaction can retain locks and recovery state.

Difference from nearby transaction results

XACT_E_ABORTED can follow an actual transaction timeout. XACT_E_NOTIMEOUT is earlier validation that the requested timeout mechanism itself is unavailable.

Practical scenario

An OLE DB session starts a local transaction with a 30-second option. The provider supports transactions but no finite timeout and returns this code. The application uses the provider default and adds a supervised abort path with explicit outcome tracking.

Guidance for software and telemetry

Report timeout capability, requested value, and elapsed runtime as separate telemetry dimensions. Never translate this HRESULT into the user message “the operation timed out.”

Official Microsoft references


Looking for a different code? Search another status or error code.