[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