List Info

Thread: Re: strange transformCtxt free-ing problem




Re: strange transformCtxt free-ing problem
user name
2007-01-15 19:32:53
"William M. Brack" <wbrackmmm.com.hk> writes:

> While waiting for a proper test file, I did some more
checking, this time
> with Valgrind (unfortunately, Valgrind and Python tend
to work in a very
> adversarial manner, so this isn't very easy).  I think
I now understand
> where the original trouble comes from.
>
> The pythonDocLoaderFuncWrapper function in
python/libxslt.c creates a
> parser context, pctxt, using xmlNewParserCtxt(). 
Apparently the reason
> for doing this is so that later, after calling the
user's loader, some
> additional error checking and cleanup can be done. 
pctxt is then
> converted into a Python object [pctxtobj =
> libxml_xmlParserCtxtPtrWrap(pctxt)] which is passed to
the user's loader
> function (the routine 'loader' in your test program).
>
> Within the loader function which you posted, you create
a new object:
>   parserContext = libxml2.parserCtxt(_obj=pctx)
> where 'pctx' is pctxtobj.  However, parserContext is
only a local python
> object, so at the end of the loader function Python
very kindly calls
> upon it's Garbage Collector to dispose of it.  That
action causes
> xmlFreeParserCtxt to be called for the underlying
parser context pointer,
> which in this instance is the (original C) variable
pctxt.  That, in
> turn, causes nothing but trouble for the remainder of
the code within
> pythonDocLoaderFuncWrapper.

Right. Then I think that the parserContext cleanup should
not cause
the C object to be cleaned up.


> That's about as far as I can go, since it now would
appear to be a
> problem with the basic design of the loader code. 
Please let me know if
> I have made some error in my analysis described above,
or if I can
> further assist in any way.

Ok. Thanks for that.

As far as I knew the loader had to use the parserContext
calls:

   ctxtReadFile

etc.. because of the memory management issues.

When you call:

   parserContext.ctxtReadFile(...)

the thought was that the underlying parserContext was being
used and
documents read were being stored in the parserContext ready
to be
cleaned up later on when the context is no longer needed.

However, that doesn't seem to be happening.

It does appear there is some confusion about the loader.
Certainly I'm
confused now. 

Daniel? This is really your bag since you designed this
API?

-- 
Nic Ferrier
http://www.tapsellfer
rier.co.uk   for all your tapsell ferrier needs
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
xmlgnome.org
http://mai
l.gnome.org/mailman/listinfo/xml

[1]

about | contact  Other archives ( Real Estate discussion Medical topics )