Re: [xml] Threads and statically linked libxml2 in a plugin

On Thu, Mar 30, 2006 at 02:14:49PM +0200, Gregoire Banderet wrote:

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 Veillard      | Red Hat
veillard redhat com  | libxml GNOME XML XSLT toolkit | Rpmfind RPM search engine

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]