[Cython] (no subject)

Stefan Behnel stefan_ml at behnel.de
Mon Dec 10 15:31:54 CET 2012


Yaroslav Halchenko, 10.12.2012 14:55:
> On Wed, 05 Dec 2012, Yaroslav Halchenko wrote:
>> On Wed, 05 Dec 2012, mark florisson wrote:
>>>> Thanks, I merged it.
> 
>>> It'd be nice if you could add this as a testcase in the tests/run
>>> directory as a "don't segfault" kind of test.
> 
>> I would be happy to extend the test battery but my blunt attempt failed,
>> i.e. the test doesn't cause the failure:
> 
>> (git)novo:~deb/cython[remotes/upstream/master~1]git
>> $> rm -rf ~/.pyxbld ; python-dbg ./runtests.py -v -v weakfail; cat tests/run/weakfail.pyx 
>> Python 2.7.3 (default, Sep  9 2012, 17:05:18)                                            
>> [GCC 4.7.1]
> 
>> Running tests against Cython 0.18-pre 73895001642d4531d32cac5ad2499f4ed5f3b286
>> Backends: c,cpp
> 
>> runTest (__main__.CythonRunTestCase)
>> compiling (c) and running weakfail ... test_weakref (line 8) (weakfail.__test__)
>> Doctest: weakfail.__test__.test_weakref (line 8) ... ok
>> runTest (__main__.CythonRunTestCase)
>> compiling (cpp) and running weakfail ... test_weakref (line 8) (weakfail.__test__)
>> Doctest: weakfail.__test__.test_weakref (line 8) ... ok
> 
>> ----------------------------------------------------------------------
>> Ran 4 tests in 2.015s
> 
>> OK
>> ALL DONE
>> [193903 refs]
>> import weakref
> 
>> foo_dict = weakref.WeakValueDictionary()
> 
>> cdef class Foo:
>>     cdef object __weakref__
> 
>> def test_weakref(key):
>>     """
>>     >>> _ = test_weakref(48)
>>     """
>>     obj = Foo()
>>     foo_dict[key] = obj
>>     return obj
> 
> 
>> whenever if I do it manually then -- yeap:
> 
>> (git)novo:~deb/cython[remotes/upstream/master~1]tests/run
>> $> rm -rf ~/.pyxbld ; PYTHONPATH=../../ python-dbg -c 'import pyximport as pi; pi.install(); import weakfail; s=weakfail.test_weakref(42)'
>> python-dbg: ../Modules/gcmodule.c:366: visit_decref: Assertion `gc->gc.gc_refs != 0' failed.
>> [1]    5508 abort      PYTHONPATH=../../ python-dbg -c 
> 
>> so  how to make it 'effective'?
> 
> no hints from the experts? ;)

Usually, running gc.collect() after this kind of test (i.e. as part of the
doctest) is a good way to provoke a crash in time.

Stefan



More information about the cython-devel mailing list