Lisandro Dalcin, 25.03.2010 19:43: > On 25 March 2010 06:17, Stefan Behnel wrote: >> >> ... and which then lead to a reproducible, GC related crash in Hudson: >> >> Doctest: closure_tests_4.__test__.g1923 (line 205) ... python: >> Modules/gcmodule.c:277: visit_decref: Assertion `gc->gc.gc_refs != 0' failed. >> > > BTW, I've previously commented on something related to this ... In > CPython, classes defining __del__() are not GC'ed, because __del__ > can invoke arbitrary Python code... However, this is not the case for > Cython's __dealloc__ ... Am I missing something?
Well, yes, there is a difference. Python code can only do Python operations for cleanup, so this can lead to all sorts of complications. On the other hand, C code can run any kind of safe C operations, and this is often required for timely memory cleanup in wrapper code. The special __dealloc__ method serves the latter purpose. Although it certainly is not hard to write crashing code in __dealloc__, it's rather unlikely that someone does so a) on purpose or b) without recognising it somewhat soon due to a crash. Stefan _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
