ctKEEP_OUT permits TRANEND() to free locks obtained inside the transaction, but keep locks obtained outside of the transaction. One subtle point is that a lock obtained outside of the transaction on a record that is updated within the transaction will be freed. ctKEEP_OUT_ALL keeps locks even if the record is updated within the transaction if the lock was obtained outside of the transaction. However, a lock obtained inside of a prior transaction that is kept at the TRANEND() of the prior transaction is treated as if it was obtained inside of a subsequent transaction , and is released at the next TRANEND() called with ctKEEP_OUT or ctKEEP_OUT_ALL.
New default behavior allows TRANEND() to distinguish between a lock obtained within a prior transaction, and a lock obtained in its own transaction. This option reverts this behavior.