Author: Armin Rigo <[email protected]>
Branch: c8-gil-like
Changeset: r1811:4a03c8a56068
Date: 2015-06-12 10:48 +0200
http://bitbucket.org/pypy/stmgc/changeset/4a03c8a56068/
Log: fix
diff --git a/c8/demo/demo_random.c b/c8/demo/demo_random.c
--- a/c8/demo/demo_random.c
+++ b/c8/demo/demo_random.c
@@ -9,6 +9,7 @@
#include "stmgc.h"
#include "stm/fprintcolor.h"
+#include "stm/fprintcolor.c"
#define NUMTHREADS 2
#define STEPS_PER_THREAD 500
diff --git a/c8/stm/detach.c b/c8/stm/detach.c
--- a/c8/stm/detach.c
+++ b/c8/stm/detach.c
@@ -132,16 +132,17 @@
conditions.
*/
int mysegnum = STM_SEGMENT->segment_num;
+ bool sp_running = (STM_PSEGMENT->safe_point == SP_RUNNING);
int segnum = ((stm_thread_local_t *)old)->last_associated_segment_num;
dprintf(("commit_fetched_detached_transaction from seg %d\n", segnum));
assert(segnum > 0);
if (segnum != mysegnum) {
- s_mutex_lock();
- assert(STM_PSEGMENT->safe_point == SP_RUNNING);
- STM_PSEGMENT->safe_point = SP_COMMIT_OTHER_DETACHED;
- s_mutex_unlock();
-
+ if (sp_running) {
+ s_mutex_lock();
+ STM_PSEGMENT->safe_point = SP_COMMIT_OTHER_DETACHED;
+ s_mutex_unlock();
+ }
set_gs_register(get_segment_base(segnum));
}
commit_external_inevitable_transaction();
@@ -149,10 +150,12 @@
if (segnum != mysegnum) {
set_gs_register(get_segment_base(mysegnum));
- s_mutex_lock();
- assert(STM_PSEGMENT->safe_point == SP_COMMIT_OTHER_DETACHED);
- STM_PSEGMENT->safe_point = SP_RUNNING;
- s_mutex_unlock();
+ if (sp_running) {
+ s_mutex_lock();
+ assert(STM_PSEGMENT->safe_point == SP_COMMIT_OTHER_DETACHED);
+ STM_PSEGMENT->safe_point = SP_RUNNING;
+ s_mutex_unlock();
+ }
}
}
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit