Author: Remi Meier <[email protected]>
Branch: stmgc-c8
Changeset: r76679:cd4d873b68c0
Date: 2015-04-01 16:04 +0200
http://bitbucket.org/pypy/pypy/changeset/cd4d873b68c0/
Log: import stmgc-c8 1062987da64f
diff --git a/rpython/translator/stm/src_stm/revision
b/rpython/translator/stm/src_stm/revision
--- a/rpython/translator/stm/src_stm/revision
+++ b/rpython/translator/stm/src_stm/revision
@@ -1,1 +1,1 @@
-f6788cf5fb73
+1062987da64f
diff --git a/rpython/translator/stm/src_stm/stm/nursery.c
b/rpython/translator/stm/src_stm/stm/nursery.c
--- a/rpython/translator/stm/src_stm/stm/nursery.c
+++ b/rpython/translator/stm/src_stm/stm/nursery.c
@@ -106,7 +106,6 @@
/* case "small enough" */
nobj = (object_t *)allocate_outside_nursery_small(size);
}
-
//dprintf(("move %p -> %p\n", obj, nobj));
/* copy the object */
@@ -143,6 +142,9 @@
/* Must trace the object later */
LIST_APPEND(STM_PSEGMENT->objects_pointing_to_nursery, nobj_sync_now);
_cards_cleared_in_object(get_priv_segment(STM_SEGMENT->segment_num), nobj,
true);
+
+ assert(IMPLY(obj_should_use_cards(STM_SEGMENT->segment_base, nobj),
+ (((uintptr_t)nobj) & 15) == 0));
}
static void _cards_cleared_in_object(struct stm_priv_segment_info_s *pseg,
object_t *obj,
diff --git a/rpython/translator/stm/src_stm/stm/sync.c
b/rpython/translator/stm/src_stm/stm/sync.c
--- a/rpython/translator/stm/src_stm/stm/sync.c
+++ b/rpython/translator/stm/src_stm/stm/sync.c
@@ -105,18 +105,25 @@
void stm_wait_for_current_inevitable_transaction(void)
{
+ restart:
+ /* make sure there is no major collection happening, which
+ could free some commit log entries */
+ s_mutex_lock();
+
struct stm_commit_log_entry_s *current =
STM_PSEGMENT->last_commit_log_entry;
/* XXX: don't do busy-waiting */
- while (1) {
- if (current->next == NULL) {
- break;
- } else if (current->next == INEV_RUNNING) {
+ while (current->next != NULL) {
+ if (current->next == INEV_RUNNING) {
+ s_mutex_unlock();
usleep(10);
- continue;
+ /* some major collection could have freed "current", so
+ restart from the beginning */
+ goto restart;
}
current = current->next;
}
+ s_mutex_unlock();
}
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit