# HG changeset patch
# User "Vadim Zaliva <lord@crocodile.org>"
# Date 1207069001 25200
# Node ID f4697e2283a94a59598e411b2579c7a0088aeddf
# Parent  de489d66999da4b87e1ef9454a09d4d815f5ae44
implemented Domain.free()

diff -r de489d66999d -r f4697e2283a9 ext/libvirt/_libvirt.c
--- a/ext/libvirt/_libvirt.c	Mon Mar 31 10:00:40 2008 -0700
+++ b/ext/libvirt/_libvirt.c	Tue Apr 01 09:56:41 2008 -0700
@@ -52,7 +52,7 @@
     do {                                                                \
         int r;                                                          \
         r = vir##kind##Free((vir##kind##Ptr) p);                        \
-        if (r < 0)                                                    \
+        if (r < 0)                                                      \
             rb_raise(rb_eSystemCallError, # kind " free failed");       \
     } while(0);
 
@@ -923,6 +923,21 @@
     _E(dom == NULL, conn, "virDomainDefineXML");
 
     return domain_new(dom, c);
+}
+
+
+/*
+ * Call +virDomainFree+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainFree]
+ */
+VALUE libvirt_dom_free(VALUE s) {
+    virDomainPtr dom = domain_get(s);
+    int r;
+
+    r = virDomainFree(dom);
+    _E(r < 0, conn(s), "virDomainFree");
+
+    DATA_PTR(s) = NULL;
+    return r;
 }
 
 /*
@@ -1652,6 +1667,7 @@
     rb_define_method(c_domain, "create", libvirt_dom_create, 0);
     rb_define_method(c_domain, "autostart", libvirt_dom_autostart, 0);
     rb_define_method(c_domain, "autostart=", libvirt_dom_autostart_set, 1);
+    rb_define_method(c_domain, "free", libvirt_dom_free, 0);
 
     /*
      * Class Libvirt::Domain::Info
diff -r de489d66999d -r f4697e2283a9 tests/tc_connect.rb
--- a/tests/tc_connect.rb	Mon Mar 31 10:00:40 2008 -0700
+++ b/tests/tc_connect.rb	Tue Apr 01 09:56:41 2008 -0700
@@ -113,6 +113,8 @@
         # pin_vcpu is not implemented in the test driver
         # enable this once it becomes available
         # dom.pin_vcpu(0,[0])
+
+        dom.free()
     end
 
     def test_network
