[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [xml] Threads and statically linked libxml2 in a plugin
- From: Daniel Veillard <veillard redhat com>
- To: Gregoire Banderet <Gregoire Banderet ge com>
- Cc: xml gnome org
- Subject: Re: [xml] Threads and statically linked libxml2 in a plugin
- Date: Thu, 30 Mar 2006 15:48:21 -0500
On Thu, Mar 30, 2006 at 02:14:49PM +0200, Gregoire Banderet wrote:
> Hello,
>
> I use the libxml2 in my multi-threaded app (let's say MYAPP).
> MYAPP runs on Linux-ppc and links libxml2 statically (libxml2.a).
> MYAPP is able to load plugins, and one of these plugins uses libxml2
> too. This plugin also links statically libxml2.
Never ever move tree strcutures between both, it will crash !
> My question: Should I call xmlInitParser() and xmlCleanupParser() in the
> plugin code?
xmlInitParser() yes, xmlCleanupParser() never, you don't care about a
few KBytes left per lib.
> The doc says that xmlInitParser() should be called once per process, so
> the answer should be "no".
usually there is one instance of the library per process hence the guideline.
> But as the code of libxml2 is duplicated in the plugin (because of
> static link), will all the libxml2 variables initialized?
of course not. How could the two instances of libxml2 linked statically
be aware of each other, clearly not possible.
> core on pthred_exit. The crash is in xmlFreeGlobalState(). I guess
> because of the pthread_key_create(&globalkey, xmlFreeGlobalState) done
> in xmlOnceInit(void).
Patch your libraries to avoid it. You put yourself in a corner by doing
static dual inclusion. No way the lib can detect or handle that behaviour
since you're static you will need to mainatin a local patch.
> PS: I can't use libxml2 as a shared lib.
And I can't handle your corner case, sorry ...
Daniel
--
Daniel Veillard | Red Hat http://redhat.com/
veillard redhat com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]