Thanks Jack. I think printf is what it will come down to. I plan to put a little code into PyDict_New to print the id and the line at which it was allocated. Hopefully this will show me all the possible suspects and I can figure it out from there.
I hope figuring out the file and line-number from within that code isn't too hard. On Sunday, December 18, 2011 9:52:46 AM UTC-8, Jack Diederich wrote: > I don't have any great advice, that kind of issue is hard to pin down. > That said, do try using a python compile with --with-debug enabled, > with that you can turn your unit tests on and off to pinpoint where > the refcounts are getting messed up. It also causes python to use > plain malloc()s so valgrind becomes useful. Worst case add assertions > and printf()s in the places you think are most janky. > > -Jack > > On Sat, Dec 17, 2011 at 11:17 PM, buck <workit...@gmail.com> wrote: > > I'm getting a fatal python error "Fatal Python error: GC object already > > tracked"[1]. > > > > Using gdb, I've pinpointed the place where the error is detected. It is an > > empty dictionary which is marked as in-use. This is somewhat helpful since > > I can reliably find the memory address of the dict, but it does not help me > > pinpoint the issue. I was able to find the piece of code that allocates the > > problematic dict via a malloc/LD_PRELOAD interposer, but that code was pure > > python. I don't think it was the cause. > > > > I believe that the dict was deallocated, cached, and re-allocated via > > PyDict_New to a C routine with bad refcount logic, then the above error > > manifests when the dict is again deallocated, cached, and re-allocated. > > > > I tried to pinpoint this intermediate allocation with a similar > > PyDict_New/LD_PRELOAD interposer, but that isn't working for me[2]. > > > > How should I go about debugging this further? I've been completely stuck on > > this for two days now :( > > > > [1] http://hg.python.org/cpython/file/99af4b44e7e4/Include/objimpl.h#l267 > > [2] > > http://stackoverflow.com/questions/8549671/cant-intercept-pydict-new-with-ld-preload > > -- > > http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list