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/tree.h>
|
||||||
#include <libxml/xpath.h>
|
#include <libxml/xpath.h>
|
||||||
#include <libxml/xpathInternals.h>
|
#include <libxml/xpathInternals.h>
|
||||||
|
#include <libxml/catalog.h>
|
||||||
|
#include <libxml/xmlschemastypes.h>
|
||||||
|
#include <libxml/relaxng.h>
|
||||||
//#if defined(WIN32)
|
//#if defined(WIN32)
|
||||||
//#include <windows.h>
|
//#include <windows.h>
|
||||||
//#else // !WIN32
|
//#else // !WIN32
|
||||||
@@ -290,10 +293,46 @@ if (!rc)
|
|||||||
/******************************************************************/
|
/******************************************************************/
|
||||||
/* XML library cleanup function. */
|
/* 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)
|
void XmlCleanupParserLib(void)
|
||||||
{
|
{
|
||||||
xmlCleanupParser();
|
xmlCleanupParser_replacement();
|
||||||
xmlMemoryDump();
|
|
||||||
} // end of XmlCleanupParserLib
|
} // end of XmlCleanupParserLib
|
||||||
|
|
||||||
/******************************************************************/
|
/******************************************************************/
|
||||||
|
Reference in New Issue
Block a user