tlds
Transactional Operations for Linked Data Structures
|
Functions | |
NORETURN void | abort_irrevocable (TxThread *tx) |
stm::scope_t * | rollback_irrevocable (STM_ROLLBACK_SIG(,,,)) |
void | unset_irrevocable_barriers (TxThread &tx) |
TM_FASTCALL void | commit_irrevocable (STM_COMMIT_SIG(tx,)) |
void | set_irrevocable_barriers (TxThread &tx) |
Variables | |
AbortHandler | old_abort_handler = NULL |
Handler for abort attempts while irrevocable. Useful for trapping problems early.
TM_FASTCALL void anonymous_namespace{irrevocability.cpp}::commit_irrevocable | ( | STM_COMMIT_SIG(tx,) | ) |
custom commit for irrevocable transactions
stm::scope_t* anonymous_namespace{irrevocability.cpp}::rollback_irrevocable | ( | STM_ROLLBACK_SIG(,,,) | ) |
Handler for rollback attempts while irrevocable. Useful for trapping problems early.
NB: For whatever reason a 'using stm::scope_t' triggers an ICE in Mac OS X's default gcc-4.2.1. It's fine if we use the fully qualified namespace here.
|
inline |
Sets all of the barriers to be irrevocable, except tmbegin.
|
inline |
Resets all of the barriers to be the curr_policy bariers, except for tmabort which reverts to the one we saved, and tmbegin which should be done manually in the caller.
AbortHandler anonymous_namespace{irrevocability.cpp}::old_abort_handler = NULL |
The abort handler is set during sys_init. We overwrite it with abort_irrevocable when a transaction becomes irrevocable, and we save the old one here so we can restore it during commit.