2009/1/7 Charlie Savage <c...@savagexi.com>:
> Hi Joseph,
>
>>> I'll see if I can put something together, we know it's in the
>>> to_solr_doc from acts_as_solr somewhere.
>>
>> Looks like the problem is in to_s on Node
>>
>> 10000.times do
>>  node = XML::Node.new 'node'
>>  node.to_s
>> end
>
> Nice work - that's a great test case.
>
> So if I I run this code:
>
> 10000000.times do
>  node = XML::Node.new 'node'
>  #node.to_s
> end
>
> I see no issues.
>
> Adding the .to_s does seem to cause a problem.  Are you actually doing so
> many to_s calls in your code?
>
> Anyway, will have to look and see if there is anything obvious in the part
> of the bindings.

Looks like the xmlOutputBufferPtr never gets freed.

This might do the trick:

Index: ext/libxml/ruby_xml_node.c
===================================================================
--- ext/libxml/ruby_xml_node.c  (revision 693)
+++ ext/libxml/ruby_xml_node.c  (working copy)
@@ -570,10 +570,16 @@
   xmlNodeDumpOutput(output, xnode->doc, xnode, level, indent, encoding);
   xmlOutputBufferFlush(output);

+  VALUE string = Qnil;
+
   if (output->conv)
-    return rb_str_new2((const char*) output->conv->content);
+    string = rb_str_new2((const char*) output->conv->content);
   else
-    return rb_str_new2((const char*) output->buffer->content);
+    string = rb_str_new2((const char*) output->buffer->content);
+
+  xmlOutputBufferClose(output);
+
+  return string;
 }

-- 
Aaron Patterson
http://tenderlovemaking.com/
_______________________________________________
libxml-devel mailing list
libxml-devel@rubyforge.org
http://rubyforge.org/mailman/listinfo/libxml-devel

Reply via email to