mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
ConnectSE: fixing memory leaks reported by valgrind
This commit is contained in:
@@ -8,6 +8,9 @@
|
||||
#include <libxml/tree.h>
|
||||
#include <libxml/xpath.h>
|
||||
#include <libxml/xpathInternals.h>
|
||||
#include <libxml/catalog.h>
|
||||
#include <libxml/xmlschemastypes.h>
|
||||
#include <libxml/relaxng.h>
|
||||
//#if defined(WIN32)
|
||||
//#include <windows.h>
|
||||
//#else // !WIN32
|
||||
@@ -290,10 +293,46 @@ if (!rc)
|
||||
/******************************************************************/
|
||||
/* XML library cleanup function. */
|
||||
/******************************************************************/
|
||||
/*
|
||||
This is a copy of xmlCleanupParser() from the libxml2 sources
|
||||
with xmlResetLastError() commented.
|
||||
|
||||
xmlResetLastError() called from the original xmlCleanupParser() causes
|
||||
valgrind to report memory leaks. This happens because
|
||||
ha_initialize_handlerton() is called from the main thread in mysqld.cc,
|
||||
while ha_finalize_handlerton() is called from a non-main thread.
|
||||
libxml2 gets confused because of xmlInitParser() and xmlCleanupParser()
|
||||
being called from the different threads.
|
||||
|
||||
Perhaps the code in mysqld.cc should eventually be modified
|
||||
to shutdown plugins from the main thread.
|
||||
*/
|
||||
static void
|
||||
xmlCleanupParser_replacement(void)
|
||||
{
|
||||
xmlCleanupCharEncodingHandlers();
|
||||
#ifdef LIBXML_CATALOG_ENABLED
|
||||
xmlCatalogCleanup();
|
||||
#endif
|
||||
xmlDictCleanup();
|
||||
xmlCleanupInputCallbacks();
|
||||
#ifdef LIBXML_OUTPUT_ENABLED
|
||||
xmlCleanupOutputCallbacks();
|
||||
#endif
|
||||
#ifdef LIBXML_SCHEMAS_ENABLED
|
||||
xmlSchemaCleanupTypes();
|
||||
xmlRelaxNGCleanupTypes();
|
||||
#endif
|
||||
//xmlResetLastError();
|
||||
xmlCleanupGlobals();
|
||||
xmlCleanupThreads(); /* must be last if called not from the main thread */
|
||||
xmlCleanupMemory();
|
||||
}
|
||||
|
||||
|
||||
void XmlCleanupParserLib(void)
|
||||
{
|
||||
xmlCleanupParser();
|
||||
xmlMemoryDump();
|
||||
xmlCleanupParser_replacement();
|
||||
} // end of XmlCleanupParserLib
|
||||
|
||||
/******************************************************************/
|
||||
|
Reference in New Issue
Block a user