Author: Armin Rigo <[email protected]>
Branch:
Changeset: r286:55a70bb6e35d
Date: 2013-06-26 17:48 +0200
http://bitbucket.org/pypy/stmgc/changeset/55a70bb6e35d/
Log: Add debugging checks.
diff --git a/c4/dbgmem.c b/c4/dbgmem.c
--- a/c4/dbgmem.c
+++ b/c4/dbgmem.c
@@ -60,6 +60,7 @@
for (i = 0; i < nb_pages; i++)
accessible_pages[base + i] = 42;
+ dprintf(("stm_malloc(%ld): %p\n", (long)sz, result));
return result;
}
diff --git a/c4/et.c b/c4/et.c
--- a/c4/et.c
+++ b/c4/et.c
@@ -1177,7 +1177,7 @@
{
/* copy the backup copy B back over the now-protected object P,
and then free B, which will not be used any more. */
- size_t size = stmcb_size(B);
+ size_t size = stmgc_size(B);
assert(B->h_tid & GCFLAG_BACKUP_COPY);
memcpy(((char *)P) + offsetof(struct stm_object_s, h_revision),
((char *)B) + offsetof(struct stm_object_s, h_revision),
diff --git a/c4/gcpage.c b/c4/gcpage.c
--- a/c4/gcpage.c
+++ b/c4/gcpage.c
@@ -155,6 +155,7 @@
}
gcp->free_loc_for_size[size_class] = (gcptr)result->h_revision;
//stm_dbgmem_used_again(result, size_class * WORD, 0);
+ dprintf(("stmgcpage_malloc(%ld): %p\n", (long)size, result));
return result;
}
else {
@@ -168,7 +169,7 @@
void stmgcpage_free(gcptr obj)
{
- size_t size = stmcb_size(obj);
+ size_t size = stmgc_size(obj);
if (size <= GC_SMALL_REQUEST_THRESHOLD) {
struct tx_public_descriptor *gcp = LOCAL_GCPAGES();
int size_class = (size + WORD - 1) / WORD;
@@ -272,7 +273,7 @@
{
while (gcptrlist_size(&objects_to_trace) > 0) {
gcptr obj = gcptrlist_pop(&objects_to_trace);
- stmcb_trace(obj, &visit);
+ stmgc_trace(obj, &visit);
}
}
diff --git a/c4/nursery.c b/c4/nursery.c
--- a/c4/nursery.c
+++ b/c4/nursery.c
@@ -6,6 +6,18 @@
return (d->nursery_base <= (char*)obj && ((char*)obj) < d->nursery_end);
}
+size_t stmgc_size(gcptr obj)
+{
+ assert(!(obj->h_tid & GCFLAG_STUB));
+ return stmcb_size(obj);
+}
+
+void stmgc_trace(gcptr obj, void visit(gcptr *))
+{
+ assert(!(obj->h_tid & GCFLAG_STUB));
+ stmcb_trace(obj, visit);
+}
+
/************************************************************/
void stmgc_init_nursery(void)
@@ -65,7 +77,7 @@
gcptr stmgc_duplicate(gcptr P)
{
- size_t size = stmcb_size(P);
+ size_t size = stmgc_size(P);
gcptr L = (gcptr)allocate_nursery(size, 0);
if (L == NULL)
return stmgc_duplicate_old(P);
@@ -79,7 +91,7 @@
gcptr stmgc_duplicate_old(gcptr P)
{
- size_t size = stmcb_size(P);
+ size_t size = stmgc_size(P);
gcptr L = (gcptr)stmgcpage_malloc(size);
memcpy(L, P, size);
L->h_tid |= GCFLAG_OLD;
@@ -237,7 +249,7 @@
assert(!is_in_nursery(thread_descriptor, id));
assert(id->h_tid & GCFLAG_OLD);
- size_t size = stmcb_size(obj);
+ size_t size = stmgc_size(obj);
memcpy(id, obj, size);
id->h_tid &= ~GCFLAG_HAS_ID;
id->h_tid |= GCFLAG_OLD;
@@ -311,7 +323,7 @@
visit_if_young(&items[i]);
- stmcb_trace((gcptr)items[i]->h_revision, &visit_if_young);
+ stmgc_trace((gcptr)items[i]->h_revision, &visit_if_young);
}
d->num_private_from_protected_known_old = size;
@@ -428,7 +440,7 @@
assert(!(obj->h_tid & GCFLAG_WRITE_BARRIER));
obj->h_tid |= GCFLAG_WRITE_BARRIER;
- stmcb_trace(obj, &visit_if_young);
+ stmgc_trace(obj, &visit_if_young);
}
}
diff --git a/c4/nursery.h b/c4/nursery.h
--- a/c4/nursery.h
+++ b/c4/nursery.h
@@ -45,5 +45,7 @@
int stmgc_minor_collect_anything_to_do(struct tx_descriptor *);
gcptr stmgc_duplicate(gcptr);
gcptr stmgc_duplicate_old(gcptr);
+size_t stmgc_size(gcptr);
+void stmgc_trace(gcptr, void visit(gcptr *));
#endif
diff --git a/c4/steal.c b/c4/steal.c
--- a/c4/steal.c
+++ b/c4/steal.c
@@ -224,7 +224,7 @@
sd.foreign_pd = foreign_pd;
memset(&sd.all_stubs, 0, sizeof(sd.all_stubs));
steal_data = &sd;
- stmcb_trace(L, &replace_ptr_to_protected_with_stub);
+ stmgc_trace(L, &replace_ptr_to_protected_with_stub);
g2l_delete_not_used_any_more(&sd.all_stubs);
/* If another thread (the foreign or a 3rd party) does a read
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit