Re: [xml] Per parser xmlGcMemSetup
- From: Rob Richards <rrichards ctindustries net>
- To: Joachim Zobel <jz-2006 heute-morgen de>
- Cc: xml gnome org
- Subject: Re: [xml] Per parser xmlGcMemSetup
- Date: Sat, 05 May 2007 07:06:28 -0400
Hi Joachim,
Joachim Zobel wrote:
Hi.
I have an apache module that uses libxml2. I have found a (potential, no
reports yet) problem with its usage of xmlGcMemSetup. I need to call
this for my module to work correctly. If there are other modules using
libxml2 (mod_php does) and they call xmlGcMemSetup, one of the modules
will stop working.
PHP does not change the memory handling routines (although this had been
a request early on but turned down). Doing so would start screwing
around with other modules that use libxml2. I urge you not to do this if
your module is for more than just some specific implementation and going
to be distributed publicly.
The problem is not threads, the problem is that other parts of apache
may be using libxml2 globals independently.
There is pretty much a gentleman's agreement with the other module
developers using libxml2 that I know not to abuse the globals. This
allows for all the modules to co-exist peacefully. When problems are
identified in other modules, everyone, so far at least, is amenable to
altering their code to make sure they all play nice together.
- During module initialization, don't alter globals (as that impacts all
other modules and also can be problematic depending upon order of module
initialization). For example, I limit my call to xmlInitParser to insure
it gets initialized in main thread.
- Try not to use globals. Many functions have been added over the years
that allow settings/options to be passed directly eliminating the need
to use globals.
- If having to use globals, make sure they do not persists over the
request. Any changes to globals should be reset to previous state as
soon as possible.
I have just found globals.c, but do not understand it yet. Are there any
examples on how to use this?
The globals are really not that difficult. Here is a small example of
disabling empty tags I use when supporting older libxml2 versions (prior
to being able to use the XML_SAVE_NO_EMPTY option). Notice that it is
reset back to original value right after use.
/* get curent setting and then set to 1 */
int saveempty = xmlSaveNoEmptyTags;
xmlSaveNoEmptyTags = 1;
... /* your code here */
/* reset global to previous value */
xmlSaveNoEmptyTags = saveempty;
Rob
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]