<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>I consistently have uncollected xmlNode objects when using the pyxmpp library.  I've used dowser (memory debugging built on cherrypy) and I can't see the objects, but printing out types by topmost ref counts (see script below) always shows uncollected xmlNodes, even after all pyxmpp object instances have been gc'd.   That is, I'm able to identify a JabberClient in memory which is later removed when the client disconnects and references to it are removed.  But each time I create/destroy a JabberClient instance, the number of orphaned xmlNodes increases.</div><div><br></div><div>Has anyone else seen this issue?  <a href="http://cmeerw.org/blog/639.html">http://cmeerw.org/blog/639.html</a> this guy complains about it being a pyxmpp-specific memory leak that went away when he switched to a different lib.  But it could just as likely be my mis-use of pyxmpp or the libxml2 objects that I create outside pyxmpp.</div><div><br></div><div>Cheers,</div><div>Chris</div><div><br></div><div><div><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Chris Becker</div><div>Lead Engineer - <a href="http://Livefyre.com">Livefyre.com</a></div><div><a href="mailto:chris@livefyre.com">chris@livefyre.com</a></div><div>415.730.5611</div><div><br></div></div></span></div></div></div><div><br class="webkit-block-placeholder"></div></div><div><br></div><div><div>def get_refcounts():</div><div>    d = {}</div><div>    sys.modules</div><div>    # collect all classes</div><div>    for m in sys.modules.values():</div><div>        for sym in dir(m):</div><div>            o = getattr (m, sym)</div><div>            if type(o) is types.ClassType:</div><div>                d[str(m)+str(o)] = sys.getrefcount (o)</div><div>    # sort by refcount</div><div>    pairs = map (lambda x: (x[1],x[0]), d.items())</div><div>    pairs.sort()</div><div>    pairs.reverse()</div><div>    return pairs</div><div><br></div><div>def print_top_100():</div><div>    pdb.set_trace()</div><div>    for n, c in get_refcounts()[:100]:</div><div>        print '%10d %s' % (n, c.__name__)</div></div><br></body></html>