Vitja Makarov, 09.05.2012 18:31: > Del statement inference enabled pyregr.test_descr testcase and it SIGSEGVs. > Here is minimal example: > > import unittest > import sys > > class Foo(unittest.TestCase): > def test_file_fault(self): > # Testing sys.stdout is changed in getattr... > test_stdout = sys.stdout > class StdoutGuard: > def __getattr__(self, attr): > test_stdout.write('%d\n' % sys.getrefcount(self)) > sys.stdout = test_stdout #sys.__stdout__ > test_stdout.write('%d\n' % sys.getrefcount(self)) > test_stdout.write('getattr: %r\n' % attr) > test_stdout.flush() > raise RuntimeError("Premature access to sys.stdout.%s" % attr) > sys.stdout = StdoutGuard() > try: > print "Oops!" > except RuntimeError: > pass > finally: > sys.stdout = test_stdout > > def test_getattr_hooks(self): > pass > > from test import test_support > test_support.run_unittest(Foo) > > It works in python and sigsegvs in cython. > It seems to me that the problem is StdoutGuard() is still used when > its reference counter is zero since Python interpreter does > Py_XINCREF() for file object and __Pyx_Print() doesn't.
Makes sense to change that, IMHO. An additional INCREF during something as involved as a print() will not hurt anyone. IIRC, I had the same problem with PyPy - guess I should have fixed it back then instead of taking the lazy escape towards using the print() function. Stefan _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel