tlds
Transactional Operations for Linked Data Structures
|
Functions | |
THREAD_LOCAL_DECL_TYPE (_ITM_transaction *) td | |
void | tmabort (stm::TxThread *tx) |
anonymous_namespace{libitm-5.1,5.cpp}::THREAD_LOCAL_DECL_TYPE | ( | _ITM_transaction * | ) |
Our thread local transaction descriptor. On most platforms this uses __thread or its equivalent, but on Mac OS X—or if explicitly selected by the user—it will use a specialized template-based Pthreads implementation.
void anonymous_namespace{libitm-5.1,5.cpp}::tmabort | ( | stm::TxThread * | tx | ) |
This is what the stm library will call when it detects a conflict and needs to abort. We always retry in this case, and if we have a registered thrown object we ignore it (the thrown object only pertains to explicit cancel-and-throw calls, which must happen in a consistent context).
Don't need any of the funky user-visible abort handling because the abort is invisible. Just treat it like a restart of the current scope. This is passed to sys_init.
Since the stm abort path doesn't protect the stack (RSTM assumes for the moment that aborts are implemented via a longjmp-style mechanism), the best that we can do is to protect the stack from here on. This is fine because we /do/ have a longjmp-style abort mechanism, and any stack clobbering that happens here is not an issue.