Author: Remi Meier <[email protected]>
Branch: stmgc-c4
Changeset: r65190:b3adf69b07ae
Date: 2013-07-05 10:46 +0200
http://bitbucket.org/pypy/pypy/changeset/b3adf69b07ae/
Log: fix some tests
diff --git a/pypy/module/thread/stm.py b/pypy/module/thread/stm.py
--- a/pypy/module/thread/stm.py
+++ b/pypy/module/thread/stm.py
@@ -5,7 +5,7 @@
from pypy.module.thread.threadlocals import BaseThreadLocals
from pypy.module.thread.error import wrap_thread_error
from pypy.interpreter.executioncontext import ExecutionContext
-from pypy.interpreter.gateway import Wrappable, W_Root, interp2app
+from pypy.interpreter.gateway import W_Root, interp2app
from pypy.interpreter.typedef import TypeDef, GetSetProperty, descr_get_dict
from rpython.rlib import rthread
from rpython.rlib import rstm
@@ -122,7 +122,7 @@
# ____________________________________________________________
-class STMLocal(Wrappable):
+class STMLocal(W_Root):
"""Thread-local data"""
@jit.dont_look_inside
diff --git a/rpython/rlib/rstm.py b/rpython/rlib/rstm.py
--- a/rpython/rlib/rstm.py
+++ b/rpython/rlib/rstm.py
@@ -28,13 +28,13 @@
def abort_info_pop(count):
if we_are_translated():
- stmgcintf.StmOperations.abort_info_pop(count)
+ pass #stmgcintf.StmOperations.abort_info_pop(count)
def charp_inspect_abort_info():
- return stmgcintf.StmOperations.inspect_abort_info()
+ pass # return stmgcintf.StmOperations.inspect_abort_info()
def abort_and_retry():
- stmgcintf.StmOperations.abort_and_retry()
+ pass # stmgcintf.StmOperations.abort_and_retry()
def before_external_call():
llop.stm_commit_transaction(lltype.Void)
diff --git a/rpython/translator/c/funcgen.py b/rpython/translator/c/funcgen.py
--- a/rpython/translator/c/funcgen.py
+++ b/rpython/translator/c/funcgen.py
@@ -584,28 +584,30 @@
from rpython.translator.stm.funcgen import op_stm
self.__class__.op_stm = op_stm
return self.op_stm(op)
- OP_STM_INITIALIZE = _OP_STM
- OP_STM_FINALIZE = _OP_STM
- OP_STM_BECOME_INEVITABLE = _OP_STM
- OP_STM_BARRIER = _OP_STM
- OP_STM_PTR_EQ = _OP_STM
- OP_STM_PUSH_ROOT = _OP_STM
- OP_STM_POP_ROOT_INTO = _OP_STM
- OP_STM_ALLOCATE = _OP_STM
- OP_STM_GET_TID = _OP_STM
- OP_STM_HASH = _OP_STM
- OP_STM_ID = _OP_STM
- OP_STM_COMMIT_TRANSACTION = _OP_STM
+ OP_STM_INITIALIZE = _OP_STM
+ OP_STM_FINALIZE = _OP_STM
+ OP_STM_BECOME_INEVITABLE = _OP_STM
+ OP_STM_BARRIER = _OP_STM
+ OP_STM_PTR_EQ = _OP_STM
+ OP_STM_PUSH_ROOT = _OP_STM
+ OP_STM_POP_ROOT_INTO = _OP_STM
+ OP_STM_ALLOCATE = _OP_STM
+ OP_STM_GET_TID = _OP_STM
+ OP_STM_HASH = _OP_STM
+ OP_STM_ID = _OP_STM
+ OP_STM_COMMIT_TRANSACTION = _OP_STM
OP_STM_BEGIN_INEVITABLE_TRANSACTION = _OP_STM
- OP_STM_SHOULD_BREAK_TRANSACTION = _OP_STM
- OP_STM_SET_TRANSACTION_LENGTH = _OP_STM
- OP_STM_CHANGE_ATOMIC = _OP_STM
- OP_STM_GET_ATOMIC = _OP_STM
- OP_STM_THREADLOCAL_GET = _OP_STM
- OP_STM_THREADLOCAL_SET = _OP_STM
- OP_STM_PERFORM_TRANSACTION = _OP_STM
- OP_STM_ENTER_CALLBACK_CALL = _OP_STM
- OP_STM_LEAVE_CALLBACK_CALL = _OP_STM
+ OP_STM_SHOULD_BREAK_TRANSACTION = _OP_STM
+ OP_STM_SET_TRANSACTION_LENGTH = _OP_STM
+ OP_STM_CHANGE_ATOMIC = _OP_STM
+ OP_STM_GET_ATOMIC = _OP_STM
+ OP_STM_THREADLOCAL_GET = _OP_STM
+ OP_STM_THREADLOCAL_SET = _OP_STM
+ OP_STM_PERFORM_TRANSACTION = _OP_STM
+ OP_STM_ENTER_CALLBACK_CALL = _OP_STM
+ OP_STM_LEAVE_CALLBACK_CALL = _OP_STM
+ OP_STM_MAJOR_COLLECT = _OP_STM
+ OP_STM_MINOR_COLLECT = _OP_STM
def OP_PTR_NONZERO(self, op):
diff --git a/rpython/translator/stm/funcgen.py
b/rpython/translator/stm/funcgen.py
--- a/rpython/translator/stm/funcgen.py
+++ b/rpython/translator/stm/funcgen.py
@@ -159,6 +159,13 @@
arg0 = funcgen.expr(op.args[0])
return 'stm_leave_callback_call(%s);' % (arg0,)
+def stm_minor_collect(funcgen, op):
+ return 'stmgc_minor_collect();'
+
+def stm_major_collect(funcgen, op):
+ return 'stmgcpage_possibly_major_collect(1);}' # forced
+
+
def op_stm(funcgen, op):
func = globals()[op.opname]
diff --git a/rpython/translator/stm/src_stm/gcpage.c
b/rpython/translator/stm/src_stm/gcpage.c
--- a/rpython/translator/stm/src_stm/gcpage.c
+++ b/rpython/translator/stm/src_stm/gcpage.c
@@ -226,7 +226,8 @@
id_copy->h_tid |= GCFLAG_VISITED;
/* XXX: may not always need tracing? */
- gcptrlist_insert(&objects_to_trace, id_copy);
+ if (!(id_copy->h_tid & GCFLAG_STUB))
+ gcptrlist_insert(&objects_to_trace, id_copy);
}
else {
/* prebuilt originals won't get collected anyway
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 @@
-38fcfb8212e2
+7a86a8b3cbb1+
diff --git a/rpython/translator/stm/test/test_ztranslated.py
b/rpython/translator/stm/test/test_ztranslated.py
--- a/rpython/translator/stm/test/test_ztranslated.py
+++ b/rpython/translator/stm/test/test_ztranslated.py
@@ -120,18 +120,21 @@
def test_bug1(self):
#
- class Foobar:
- pass
def check(foobar, retry_counter):
rgc.collect(0)
return 0
#
+ from rpython.rtyper.lltypesystem.rclass import OBJECTPTR
+ S = lltype.GcStruct('S', ('got_exception', OBJECTPTR))
+ PS = lltype.Ptr(S)
+ perform_transaction = rstm.make_perform_transaction(check, PS)
class X:
def __init__(self, count):
self.count = count
def g():
x = X(1000)
- rstm.perform_transaction(check, Foobar, Foobar())
+ perform_transaction(lltype.malloc(S))
+ #rstm.perform_transaction(check, Foobar, Foobar())
return x
def entry_point(argv):
x = X(len(argv))
@@ -145,8 +148,6 @@
def test_bug2(self):
#
- class Foobar:
- pass
def check(foobar, retry_counter):
return 0 # do nothing
#
@@ -154,11 +155,16 @@
pass
prebuilt2 = [X2(), X2()]
#
+ from rpython.rtyper.lltypesystem.rclass import OBJECTPTR
+ S = lltype.GcStruct('S', ('got_exception', OBJECTPTR))
+ PS = lltype.Ptr(S)
+ perform_transaction = rstm.make_perform_transaction(check, PS)
def bug2(count):
x = prebuilt2[count]
x.foobar = 2 # 'x' becomes a local
#
- rstm.perform_transaction(check, Foobar, Foobar())
+ #rstm.perform_transaction(check, Foobar, Foobar())
+ perform_transaction(lltype.malloc(S))
# 'x' becomes the global again
#
y = prebuilt2[count] # same prebuilt obj
@@ -175,10 +181,14 @@
assert '12\n12\n' in data, "got: %r" % (data,)
def test_prebuilt_nongc(self):
- class Foobar:
- pass
def check(foobar, retry_counter):
return 0 # do nothing
+ from rpython.rtyper.lltypesystem.rclass import OBJECTPTR
+ from rpython.rtyper.lltypesystem import lltype
+ S = lltype.GcStruct('S', ('got_exception', OBJECTPTR))
+ PS = lltype.Ptr(S)
+ perform_transaction = rstm.make_perform_transaction(check, PS)
+
from rpython.rtyper.lltypesystem import lltype
R = lltype.GcStruct('R', ('x', lltype.Signed))
S1 = lltype.Struct('S1', ('r', lltype.Ptr(R)))
@@ -187,7 +197,8 @@
# hints={'stm_thread_local': True})
#s2 = lltype.malloc(S2, immortal=True, flavor='raw')
def do_stuff():
- rstm.perform_transaction(check, Foobar, Foobar())
+ perform_transaction(lltype.malloc(S))
+ #rstm.perform_transaction(check, Foobar, Foobar())
print s1.r.x
#print s2.r.x
do_stuff._dont_inline_ = True
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit