class Nokogiri::LibXML::XmlDocument
:nodoc:
use at the point of creation, so we can be sure the document will be GCed properly
def self.release ptr
def self.release ptr doc = LibXML::XmlDocumentCast.new(ptr) func = LibXML.xmlDeregisterNodeDefault(nil) begin ns = LibXML::XmlNodeSetCast.new(doc[:_private].get_pointer(LibXML.pointer_offset(1))) ns[:nodeNr].times do |j| node_cstruct = LibXML::XmlNode.new(ns[:nodeTab].get_pointer(LibXML.pointer_offset(j))) case node_cstruct[:type] when Nokogiri::XML::Node::ATTRIBUTE_NODE LibXML.xmlFreePropList(node_cstruct) else LibXML.xmlAddChild(doc, node_cstruct) if node_cstruct[:parent].null? end end LibXML::XmlNodeSet.release(ns.pointer) LibXML.free(doc[:_private]) rescue puts "Nokogiri::LibXML::XmlDocument.release: exception: '#{$!}'" ensure LibXML.xmlFreeDoc(ptr) LibXML.xmlDeregisterNodeDefault(func) end end
def initialize(ptr)
def initialize(ptr) super(ptr) self.alloc_tuple end