Hello

our customer showed a very significant memory leak in xml2.

try to

select xpath_number('<data>' || generate_series || '</data>','/data')
from generate_series(1,500000);

attention! take all memory very fast

It never release a memory allocated for context and doctree.

Regards

Pavel Stehule
*** ./xpath.c.orig	2010-03-03 20:10:29.000000000 +0100
--- ./xpath.c	2010-11-26 09:50:42.492451256 +0100
***************
*** 53,58 ****
--- 53,61 ----
  
  static xmlXPathObjectPtr pgxml_xpath(text *document, xmlChar *xpath);
  
+ /* should be global, to be realeased */
+ static xmlDocPtr	doctree;
+ static xmlXPathContextPtr ctxt;
  
  /*
   * Initialize for xml parsing.
***************
*** 238,243 ****
--- 241,250 ----
  
  	if (xpres == NULL)
  		PG_RETURN_NULL();
+ 
+ 	xmlXPathFreeContext(ctxt);
+ 	xmlFreeDoc(doctree);
+ 
  	PG_RETURN_TEXT_P(xpres);
  }
  
***************
*** 272,277 ****
--- 279,288 ----
  
  	if (xpres == NULL)
  		PG_RETURN_NULL();
+ 
+ 	xmlXPathFreeContext(ctxt);
+ 	xmlFreeDoc(doctree);
+ 
  	PG_RETURN_TEXT_P(xpres);
  }
  
***************
*** 310,315 ****
--- 321,330 ----
  
  	if (xpres == NULL)
  		PG_RETURN_NULL();
+ 
+ 	xmlXPathFreeContext(ctxt);
+ 	xmlFreeDoc(doctree);
+ 
  	PG_RETURN_TEXT_P(xpres);
  }
  
***************
*** 341,346 ****
--- 356,365 ----
  
  	fRes = xmlXPathCastToNumber(res);
  
+ 	/* release a used context and document */
+ 	xmlXPathFreeContext(ctxt);
+ 	xmlFreeDoc(doctree);
+ 
  	if (xmlXPathIsNaN(fRes))
  		PG_RETURN_NULL();
  
***************
*** 375,380 ****
--- 394,402 ----
  
  	bRes = xmlXPathCastToBoolean(res);
  
+ 	xmlXPathFreeContext(ctxt);
+ 	xmlFreeDoc(doctree);
+ 
  	PG_RETURN_BOOL(bRes);
  }
  
***************
*** 385,392 ****
  static xmlXPathObjectPtr
  pgxml_xpath(text *document, xmlChar *xpath)
  {
- 	xmlDocPtr	doctree;
- 	xmlXPathContextPtr ctxt;
  	xmlXPathObjectPtr res;
  	xmlXPathCompExprPtr comppath;
  	int32		docsize;
--- 407,412 ----
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to