On Monday, December 31, 2012 5:39:26 PM UTC+1, Jean-Pierre Flori wrote: > > > > On Monday, December 31, 2012 5:32:05 PM UTC+1, Nils Bruin wrote: >> >> On Dec 31, 7:29 am, Nils Bruin <nbr...@sfu.ca> wrote: >> >> > I am not sure that this is exactly the issue we're running into, but >> > it seems plausible (it certainly needs a very brittle confluence of >> > circumstances to become apparent). Furthermore, I think it is a >> > scenario that does need addressing, because TripleDictEraser doesn't >> > seem to guard against this. >> >> In fact, upon further inspection, I don't think this issue is what >> bites us here. The dictionary in question only contains weakrefs in >> its values. >> >> I now believe this is a genuine bug in Python. We don't have a good >> testcase, though, so I don't know how to report. However, as you see >> in the traceback: >> >> #0 PyObject_Free (p=0x7fffbeb3e330) at Objects/obmalloc.c:981 >> #1 0x00007ffff7cc7b76 in subtype_dealloc (self=0x7fffbeb3e350) at >> Objects/typeobject.c:1014 >> #2 0x00007ffff7d4b7ca in delete_garbage (old=0x7ffff7fe19e0, >> collectable=0x7fffffffafb0) at Modules/gcmodule.c:770 >> #3 collect (generation=1) at Modules/gcmodule.c:930 >> #4 0x00007ffff7d4c1a8 in collect_generations () at Modules/ >> gcmodule.c: >> 996 >> #5 _PyObject_GC_Malloc (basicsize=<optimized out>) at Modules/ >> gcmodule.c:1457 >> #6 _PyObject_GC_Malloc (basicsize=<optimized out>) at Modules/ >> gcmodule.c:1439 >> #7 0x00007ffff7d4c1cd in _PyObject_GC_New (tp=0x7ffff7fb7d00) at >> Modules/gcmodule.c:1467 >> #8 0x00007ffff7c86cb8 in PyWrapper_New (d=0x7ffff7bce230, >> self=0xb2eca0) at Objects/descrobject.c:1068 >> >> (this is below the TripleDictEraser call). What you see is that during >> our callback, a garbage collection is triggered! This of course >> discovers all sorts of things that can be deleted, including things >> that are already scheduled for deletion. Other interpretations would >> be very welcome. >> > It seems very plausible, whence the possible need to look at Py_Clear. > > The difference between the "del A[1]" and "A.__delitem__(1)" might only be > the fact that in the latter case (where more fucntions calls are performed) > a gc is triggered whereas its not in the first case, that's just a wild > guess though. >
See http://osdir.com/ml/python.python-3000.devel/2006-04/msg01017.html as well. Of course, if Nils is right, it might not be up to us to solve such problems, but rather Python itself... -- 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.