Here's an idea:

Have a babysit mode for refcounting.

a) When entering an exiting from a function, "__Pyx_PushRefCountFrame" 
and "__Pyx_PopRefcountFrame(__pyx_r)" are called.

b) Use __Pyx_INCREF and __Pyx_DECREF instead

c) Whenever a function call returns an object with a reference, 
__Pyx_GOTREF should be called on the returned object.

(Point c) could be done with refactoring "the call of a Python C API 
function" to code.call_func or similar -- I'm noticing that a lot of 
code is duplicated all over the place currently.)

With these, I think it should be possible to (conditionally on a 
#define) define things in such a way that a) __Pyx_DECREF can log useful 
information and exit more gracefully than a segfault, b) 
__Pyx_PopRefcountFrame can report any memory leaks, locally from the 
perspective of the function.

Am I overlooking anything obvious? What do you think? I'm merely 
wondering if it is a good enough idea to warrant creating a ticket for 
it, not volunteering at this stage.

If this was done before moving more temps it could perhaps help with 
gaining confidence in a change quickly, and it would be a useful 
addition to the regression test framework for the future as well.

-- 
Dag Sverre
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to