| Previous | Next |
| XACT_S_READONLY | XACT_S_OKINFORM |
XACT_S_SOMENORETAIN
Some enlisted resources could not retain after abort
XACT_S_SOMENORETAIN is HRESULT 315395 (0x0004D003) from winerror.h. The documented description is “The transaction was successfully aborted; However, this is a coordinated transaction, and some number of enlisted resources were aborted outright because they could not support abort-retaining semantics.” The severity bit indicates a nonfailure result, but the value carries a specific condition that must not be collapsed into plain S_OK.
In the COM transaction and MSDTC protocol, this result means that the transaction was successfully aborted; However, this is a coordinated transaction, and some number of enlisted resources were aborted outright because they could not support abort-retaining semantics. Acceptance depends on the returned state and outputs, not only on the cleared severity bit.
Where the status is encountered
- ITransaction commit or abort processing; log the exact method and object state instead of interpreting the constant outside that contract.
- Resource-manager enlistment and coordinated outcomes; log the exact method and object state instead of interpreting the constant outside that contract.
- Transaction event-sink notification passes; log the exact method and object state instead of interpreting the constant outside that contract.
What must be true before accepting it
Verify that the caller knows which resources ended outright and does not reuse them as members of a retained transaction. This check separates a legitimate outcome from code that ignores an incomplete or altered operation.
Before retrying the operation, classify its effects as completed, partial, pending, cancelled, adapted, or terminal.
Evidence to preserve
- Preserve retaining flags.
- Preserve resource-manager votes.
- Preserve resources aborted outright.
- Preserve new transaction identity.
- Preserve session objects retained or recreated.
Difference from nearby results
The distinction around it determines whether the caller stops, waits, consumes output, or changes state.
Correct handling and recovery
Enumerate resource outcomes, recreate non-retaining enlistments, and continue only after a new transaction boundary is established for those resources.
Practical scenario
A coordinated abort requests retaining semantics. One resource cannot retain, so the application reopens that session before starting follow-up work.
References
- Microsoft: COM transaction status codes — official Microsoft material relevant to this HRESULT.
- Microsoft: ITransaction::Commit
- Microsoft: ITransaction::Abort
- Microsoft: HRESULT values
Looking for a different code? Search another status or error code.