summaryrefslogtreecommitdiff
path: root/libitm/retry.cc
diff options
context:
space:
mode:
authortorvald <torvald@138bc75d-0d04-0410-961f-82ee72b054a4>2012-10-24 19:52:02 +0000
committertorvald <torvald@138bc75d-0d04-0410-961f-82ee72b054a4>2012-10-24 19:52:02 +0000
commitf0de1163ef09e28e4b13f61214a8b88b10a9090b (patch)
treeeb6dab1987f0c9c1f49fce76ba1dd1d8267e3277 /libitm/retry.cc
parent447002cc56e7eab79142c2e1cc48e06bd60a83e4 (diff)
downloadgcc-f0de1163ef09e28e4b13f61214a8b88b10a9090b.tar.gz
Ask dispatch whether it requires serial mode.
* retry.cc (gtm_thread::decide_begin_dispatch): Ask dispatch whether it requires serial mode instead of assuming that for certain dispatchs. * dispatch.h (abi_dispatch::requires_serial): New. (abi_dispatch::abi_dispatch): Adapt. * method-gl.cc (gl_wt_dispatch::gl_wt_dispatch): Adapt. * method-ml.cc (ml_wt_dispatch::ml_wt_dispatch): Same. * method-serial.cc (serialirr_dispatch::serialirr_dispatch, serial_dispatch::serial_dispatch, serialirr_onwrite_dispatch::serialirr_onwrite_dispatch): Same. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@192777 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libitm/retry.cc')
-rw-r--r--libitm/retry.cc7
1 files changed, 2 insertions, 5 deletions
diff --git a/libitm/retry.cc b/libitm/retry.cc
index 660bf5244e3..172419bb803 100644
--- a/libitm/retry.cc
+++ b/libitm/retry.cc
@@ -173,7 +173,7 @@ GTM::gtm_thread::decide_begin_dispatch (uint32_t prop)
&& dd->closed_nesting_alternative())
dd = dd->closed_nesting_alternative();
- if (dd != dispatch_serial() && dd != dispatch_serialirr())
+ if (!(dd->requires_serial() & STATE_SERIAL))
{
// The current dispatch is supposedly a non-serial one. Become an
// active transaction and verify this. Relaxed memory order is fine
@@ -193,10 +193,7 @@ GTM::gtm_thread::decide_begin_dispatch (uint32_t prop)
// We are some kind of serial transaction.
serial_lock.write_lock();
- if (dd == dispatch_serialirr())
- state = STATE_SERIAL | STATE_IRREVOCABLE;
- else
- state = STATE_SERIAL;
+ state = dd->requires_serial();
return dd;
}