Details
Description
_txn_rollback_to_stable_lookaside_fixup() and _txn_rollback_to_stable_btree() both include a code fragment like this:
/*
|
* Copy the stable timestamp, otherwise we'd need to lock it each time
|
* it's accessed. Even though the stable timestamp isn't supposed to be
|
* updated while rolling back, accessing it without a lock would
|
* violate protocol.
|
*/
|
rollback_timestamp = txn_global->stable_timestamp;
|
However, WT_TXN_GLOBAL.stable_timestamp is not declared volatile, so there's nothing to prevent the compiler from reordering or rewriting the instruction.