id summary reporter owner description type status priority milestone component resolution keywords cc merged author reviewer upstream work_issues branch commit dependencies stopgaps
11339 Refcounting for Singular rings gagern drkirkby "= Ref counting for Singular rings =
Python makes no guarantees that destructors are called if circular references are involved. This patch implements an extra Python proxy layer that correctly refcounts Singular rings. In contrast to our earlier code, it will release the singular rings once they are no longer in use. This triggers various issues in Sage/libSingular that are dealt with in the follow-up ticket #10903
= Historic discussion =
As [https://github.com/cschwan/sage-on-gentoo/issues/51#issuecomment-1181259 described for the Sage on Gentoo project], there is a problem in how parts of sage use `__deallocate__` in their Cython code. I've actually traced an instance of [http://hg.sagemath.org/sage-main/file/361a4ad7d52c/sage/libs/singular/groebner_strategy.pyx#l134 groebner_strategy.pyx] causing segmentation faults under Python 2.7.
What happens is that the garbage collector invokes the [http://docs.python.org/c-api/typeobj.html#tp_clear tp_clear] function for the object. Its implementation is provided by Cython, and one of its effects is that every python reference will be set to `None`. A bit later on, [http://docs.python.org/c-api/typeobj.html#tp_dealloc tp_dealloc] is called and invokes the `__deallocate__` method. By that time, `_parent` is `None`, so accessing `_parent._ring` is a bad idea, and in this case it turns out to be null.
Others have had similar problems before. There are [http://stackoverflow.com/questions/4501938/how-can-c-object-lifetimes-be-correctly-managed-in-cython crude workarounds] floating around. I guess a proper solution would be twaking cython to allow custom code in the tp_clear function. In other words, have a ""magic"" mehod `__clear__` similar to the magic `__deallocate__`. But I'll wait for comments here first, before taking this to cython upstream. Perhaps people with more experience have better solutions to offer. And I won't mind if you decide to take this to Cython devs yourselves.
= Apply =
Apply:
* [attachment:trac_11339_refcount_singular_rings.patch]
* [attachment:trac_11339_refcount_singular_polynomials.patch]
" defect closed critical sage-4.7.2 algebra fixed sd31 fbissey robertwb burcin malb SimonKing leif sage-4.7.2.alpha4 Volker Braun, Martin von Gagern François Bissey, Steven Trogdon, Martin Albrecht N/A #10903 (for doctests)