[Cython] PATCH: new refnanny API
Dag Sverre Seljebotn
dagss at student.matnat.uio.no
Tue Feb 3 10:16:24 CET 2009
Lisandro Dalcin wrote:
> Here you have a preliminary patch for loading the refnanny API
> skipping dlopen() hackery.
>
> For this to work, just make Cython/Runtime/refnanny.pyx a extension
> module, and put it somewhere in your PYTHONPATH. That's all!! Now
> build other extensions with -DCYTHON_REFNANNY and enjoy...
>
> Take into account that I'm not completelly happy with the current
> patch, more work is required.
>
> 1) As namespaces are a honking great idea, I do not see the point of
> using "Refnanny" prefixes on class and function names at refnanny.py
>
By all means.
> 2) I'm a bit uncomfortable with the way I had to initialize stuff at
> module initialization function.
>
Looks OK with me.
> 3) Many unittests in mpi4py pass, but I'm also gettting some
> segfaults. In particular, the refnanny stuff should no be emmited for
> "pure" cdef functions (I mean, those with no Python objects at all in
> args, retvals and local vars). For example, in mpi4py I have a
> finalizer routine that is registered with Py_AtExit(), then it is
> called after Py_Finalize(), thus no Python code should run. I'm also
> getting some bad interaction between refnanny and exception handling,
> but I need to dive deeper to catch the problem, no yet sure what is
> going on.
>
Can't you declare the function as "nogil"? I.e.
cdef nogil int myfunc(): ...
I already disable the refnanny if "nogil" is declared, and then Python
operations are disallowed. Doing this automatically though is a bit
hard, I'd have to make sure that no Python temporaries are ever
constructed in the function, which is more than a five-minute job. If
you give a good reason the nogil modifier doesn't do the trick I can
look into it.
I've applied your patch, thanks! RTLD_GLOBAL-issues aside, it is a lot
easier to set up the refnanny on other code than the test suite now.
Please vote: Should we install the refnanny into site-packages when
doing a Cython install? Then we could just tell users "try compiling
with the -DCYTHON_REFNANNY flag" to get diagnostics.
Dag Sverre
More information about the Cython-dev
mailing list