> > Maybe the problem is with endomorphism rings, because we have the domain
> > and codomain pointing to the same parent, that's a nice culprit for a
> > superfluous decref.

I spent some quality time with gdb and this failing doctest. The good
news: memory layout is deterministic, so you can just set a "watch" on
a memory location and get a break every time that location gets
touched. I've analyzed what goes wrong (at least for me) to a certain
degree:

PyMalloc uses pools for fixed sized memory blocks. Unused blocks in a
page are linked together in a "freelist". The segfault arises from
interpreting a non-pointer value as a pointer value. The "1" that ends
up there happens to be a refcount of a string. I got the strong
impression that that same block also got allocated as a "tuple", which
has a "GC block" in front of it. The 1 should wreak havoc there as
well, but apparently never does. It may well be that this block got
inserted twice into a freelist and hence gets allocated twice, which
later on messes up the memory management.

Just prior to the activity that I thought looked like a double free, I
noticed that this block is indeed used for allocation of
sage.categories.modules.Modules.HomCategory.parent_class. This is
happening around the doctest

            sage: from sage.modules.module import Module
            sage: M = Module(ZZ); M
            sage: M.endomorphism_ring()

and some free activity afterwards did have weakref.callback stuff in
its stack trace.

I had good hopes that with a --without-pymalloc build, we'd catch a
double free like this red handed, but no such luck (I cannot reproduce
the problem at all on debug builds). My afternoon with gdb has
horribly little to show for, but at least my observations seem in line
with what JP has found.

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To post to this group, send email to sage-devel@googlegroups.com.
To unsubscribe from this group, send email to 
sage-devel+unsubscr...@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel?hl=en.


Reply via email to