Author: Armin Rigo <[email protected]>
Branch: boehm-rawrefcount
Changeset: r86926:43fec2a94ecc
Date: 2016-09-07 14:22 +0200
http://bitbucket.org/pypy/pypy/changeset/43fec2a94ecc/
Log: Test and fix
diff --git a/rpython/rlib/src/boehm-rawrefcount.c
b/rpython/rlib/src/boehm-rawrefcount.c
--- a/rpython/rlib/src/boehm-rawrefcount.c
+++ b/rpython/rlib/src/boehm-rawrefcount.c
@@ -143,8 +143,16 @@
hash_link(lnk);
- int j = GC_general_register_disappearing_link((void **)&lnk->gcenc, gcobj);
- assert(j == GC_SUCCESS);
+ if (GC_base(gcobj) == NULL) {
+ /* 'gcobj' is probably a prebuilt object - it makes no */
+ /* sense to register it then, and it crashes Boehm in */
+ /* quite obscure ways */
+ }
+ else {
+ int j = GC_general_register_disappearing_link(
+ (void **)&lnk->gcenc, gcobj);
+ assert(j == GC_SUCCESS);
+ }
}
static pyobj_t *hash_get_entry(gcobj_t *gcobj)
diff --git a/rpython/rlib/test/test_rawrefcount.py
b/rpython/rlib/test/test_rawrefcount.py
--- a/rpython/rlib/test/test_rawrefcount.py
+++ b/rpython/rlib/test/test_rawrefcount.py
@@ -281,7 +281,13 @@
assert rawrefcount.to_obj(W_Root, ob) == p
return ob
+ prebuilt_p = W_Root(-42)
+ prebuilt_ob = lltype.malloc(PyObjectS, flavor='raw', zero=True,
+ immortal=True)
+
def entry_point(argv):
+ rawrefcount.create_link_pypy(prebuilt_p, prebuilt_ob)
+ prebuilt_ob.c_ob_refcnt += REFCNT_FROM_PYPY
oblist = [make_ob() for i in range(50)]
rgc.collect()
deadlist = []
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit