Uncontended Commit
- Install transaction pointer in orecs
- Sort write entries (old_version != new_version) by address
- Replace old version number with transaction pointer using CAS
- CAS transaction state from UNDECIDED to READ-CHECK
- Validate all read entries to make sure we have a consistent snapshot
- CAS transaction state to SUCESSFUL. This changes all logical values
- Update heap locations with new values (no logical change)
- CAS new version numbers into orecs (provided they still point to our transaction)
- Transaction record no longer visible, free it.
- How is read check atomic?