On 10 Jun 2014, at 09:14, Daniel Veillard wrote: >> * For this specific case (error cleanup), I strongly believe that the >> problem could be corrected without affecting either the API or ABI, but I >> don't have time to investigate more since the workaround `xmlResetLastError` >> does work OK for me, as I only make libxml2 calls from C++ wrappers anyway. > > Windows may have special ways to reclaim the memory, the problem is that > there is no safe way to do the cleanup in general. It's thread local > storage too, and then behaviour is OS dependent (possibly compiler > dependant). I take patches but it's a very difficult area....
FWIW last time this all came up (possibly my fault) I was going to send you a patch, What that would have done was: a) provide 2 new calls: xmlContextPtr xmlNewContext() xmlFreerContext(xmlContextPtr ctx) b) make these two increment a static variable, and if the variable was zero on entry, do what xmlInitParser does; and decrement a static variable, and if it reaches zero, do xmlCleanupParser. Make them return and free an opaque xmlContext struct that currently holds nothing. c) mark xmlInitParser and xmlCleanupParser as deprecated This at least allows for multiple inits and frees between libraries, but does not (yet) solve the problem of global variables. Eventually we'd then make an xmlContext contain an xmlGlobalState and add variants of each API call that allowed for an xmlContext to be passed as the first argument; this could be relatively easily done with some nasty perl on the source code. -- Alex Bligh _______________________________________________ xml mailing list, project page http://xmlsoft.org/ xml@gnome.org https://mail.gnome.org/mailman/listinfo/xml