Hi everyone,
while trying to use the libxml++ in a browser plugin project (namely
lightspark) I've discovered that libxml++ seems not designed to coexist with
unwrapped usage of libxml2 in the same process. This is caused by the static
initialization and destruction done by Document::Init, I'm reporting the
snippet here for convenience
Document::Init::Init()
{
xmlInitParser(); //Not always necessary, but necessary for thread safety.
xmlRegisterNodeDefault(on_libxml_construct);
xmlDeregisterNodeDefault(on_libxml_destruct);
xmlThrDefRegisterNodeDefault(on_libxml_construct);
xmlThrDefDeregisterNodeDefault(on_libxml_destruct);
}
Document::Init::~Init()
{
xmlCleanupParser(); //As per xmlInitParser(), or memory leak will happen.
}
So the xml system is uninitialized when libxml++ is unloaded, even if there
are other users of libxml2 still living. Moreover, every xml node creation go
through libxml++ handlers, and this causes crashes here and there if the
calling code is expecting to use normal libxml2.
Any idea to make libxml++ more robust to such issues?
Regards,
Alessandro Pignotti
Attachment:
signature.asc
Description: This is a digitally signed message part.