[libvirt] [PATCH 0/3] tighten up integer parsing
by Eric Blake
I thought my recent improvements to <memory> parsing were complete,
until I stumbled upon https://bugzilla.redhat.com/show_bug.cgi?id=617711,
which shows a file that fails 'virt-xml-validate' but was silently
accepted, and worse, misintepreted the user's intentions.
I didn't have time to scrub the entire code base, but I can at least
prevent the clean files from getting worse.
Eric Blake (3):
virsh: avoid strtol
conf: tighten up XML integer parsing
build: avoid strtol and strtod
cfg.mk | 14 ++++++++++
src/conf/domain_conf.c | 12 +++-----
src/conf/storage_conf.c | 6 ++--
src/util/util.c | 14 +++++-----
src/util/virmacaddr.c | 2 +-
src/util/xml.c | 36 +++----------------------
tools/virsh.c | 66 +++++++++++++---------------------------------
7 files changed, 53 insertions(+), 97 deletions(-)
--
1.7.7.6
12 years, 7 months
[libvirt] Problem with USB pass-through
by Carlos Rodrigues
Hello,
I have a problem with USB pass-through.
I can see the USB device in host machine, i see it in libvirt but when
attach to VM i get an error:
# lsusb
...
Bus 002 Device 014: ID 0529:0001 Aladdin Knowledge Systems HASP v0.06
...
# virsh nodedev-list
...
usb_device_529_1_noserial
usb_device_529_1_noserial_if0
usb_device_529_1_noserial_usbraw
...
# virsh dumpxml vm
...
<hostdev mode='subsystem' type='usb' managed='no'>
<source>
<vendor id='0x0529'/>
<product id='0x0001'/>
</source>
</hostdev>
...
# cat /var/log/libvirt/qemu/vm.log
...
LC_ALL=C PATH=/sbin:/usr/sbin:/bin:/usr/bin HOME=/
QEMU_AUDIO_DRV=none /usr/bin/qemu-kvm -S -M pc -m 3800 -smp 4 -name vm
-uuid 056dad8b-22a4-4472-cb5e-8cf60215a41b -monitor
unix:/var/lib/libvirt/qemu/v,.monitor,server,nowait -boot c -drive
file=/dev/vg_sata2/vol_vm,if=virtio,boot=on,format=raw -net
nic,macaddr=00:00:00:0b:5b:ec,vlan=0,model=virtio,name=net0 -net
tap,fd=21,vlan=0,name=hostnet0 -serial none -parallel none -usb
-usbdevice tablet -vnc 0.0.0.0:4 -k pt -vga cirrus -usbdevice
host:002.014 -balloon virtio
husb: open device 2.12
/proc/bus/usb/002/012: No such file or directory
Warning: could not add USB device host:002.014
...
I'm using libvirt 0.8.3 with kvm 88.
Anyone have see this problem?
Regards,
--
Carlos Rodrigues <cmar(a)eurotux.com>
Investigação e Desenvolvimento
Eurotux Informática, S.A. [http://eurotux.com]
12 years, 7 months
[libvirt] [PATCH 0/2 v2] use qemu's dump-guest-meory when vm uses host device
by Wen Congyang
Currently, we use migrate to dump guest's memory. There is one
restriction in migrate command: the device's status should be
stored in qemu because the device's status should be passed to
target machine.
If we passthrough a host device to guest, the device's status
is stored in the real device. So migrate command will fail.
We usually use dump when guest is panicked. So there is no need
to store device's status in the vmcore.
qemu will have a new monitor command dump-guest-memory to dump
guest memory, but it doesn't support async now(it will support
later when the common async API is implemented).
So I use dump-guest-memory only when the guest uses host device
in this patchset.
Note: the patchset for qemu is still queued. Luiz has acked,
but he waits an ACK from Jan and/or Anthony. They are too busy,
and donot reply.
Change from v1 to v2:
1. remove the implemention for text mode.
Wen Congyang (2):
qemu: implement qemu's dump-guest-memory
qemu: try to use qemu's dump-guest-meory when vm uses host device
src/qemu/qemu_domain.c | 1 +
src/qemu/qemu_domain.h | 1 +
src/qemu/qemu_driver.c | 42 ++++++++++++++++++++++++++++++++++++++++--
src/qemu/qemu_monitor.c | 36 ++++++++++++++++++++++++++++++++++++
src/qemu/qemu_monitor.h | 13 +++++++++++++
src/qemu/qemu_monitor_json.c | 42 ++++++++++++++++++++++++++++++++++++++++++
src/qemu/qemu_monitor_json.h | 7 +++++++
7 files changed, 140 insertions(+), 2 deletions(-)
12 years, 7 months
[libvirt] Making the Thread-safety issues with vbox driver ?
by Jean-Baptiste Rouault
On Wednesday 04 April 2012 17:56:12 Jean-Baptiste Rouault wrote:
> On Monday 16 January 2012 11:34:53 Matthias Bolte wrote:
> > Okay, without looking deeper into this here are some ideas:
> >
> > The XPCOM API libvirt uses might not be threadsafe, or needs to be
> > initialized for every thread that wants to use it. Currently its only
> > initialized for the thread that opens the driver. I know that this is
> > the case on Windows were VirtualBox uses MSCOM for its API and you
> > need to call CoInitialize on every thread. This is currently not done
> > for the MSCOM glue in libvirt, so I know that on Windows the
> > VirtualBox driver is not threadsafe currently. Also I didn't look into
> > a solution for this yet. Maybe we need a thread local variable that
> > holds whether (MS/XP)COM was already initialized for this thread and
> > add a check to every driver function to initialize it when needed.
> >
> > Did you try to open a connection for each thread instead of trying to
> > share one? If that works reliable it might indicate that there is an
> > VirtualBox API initialization problem.
>
> I tried today with one connection for each thread and it works.
>
> I changed the vbox driver so that the pfnComInitialize function is called
> only when the first connection is opened : it breaks the test, even with
> one connection per thread.
>
> I guess we'll have to use a thread local variable as you suggested, unless
> someone has a better idea to handle this problem.
Hi,
I looked deeper into these thread-safety issues, once a new connection is
opened for each thread, everything works well.
However, opening and closing connections isn't thread-safe at all for two
reasons :
- VirtualBox C bindings initialization and uninitialization functions aren't
thread-safe. I talked about it with upstream on IRC and they are probably not
going to fix it, but would accept a patch fixing the issue. I'm going to contact
upstream again to get some advices so I can write a patch.
- In the libvirt vbox driver, for each new connection, modification of the
global variable g_pVBoxGlobalData isn't protected (see line 1040 of
vbox_tmpl.c).
First of all, is it really necessary to replace it on each new connection, or
would it be ok to initialize it only when the first connection is opened ?
A global mutex is needed in the vbox driver to protect access to
g_pVBoxGlobalData, the vboxRegister() function seems to be the best place to
initialize such a mutex unless there is another entry point to do this ?
--
Jean-Baptiste ROUAULT
Ingénieur R&D - diateam : Architectes de l'information
Phone : +33 (0)2 98 050 050 Fax : +33 (0)2 98 050 051
12 years, 7 months
[libvirt] [libvirt-glib] Add async variant of gvir_domain_get_info()
by Zeeshan Ali (Khattak)
From: "Zeeshan Ali (Khattak)" <zeeshanak(a)gnome.org>
---
libvirt-gobject/libvirt-gobject-domain.c | 80 ++++++++++++++++++++++++++++++
libvirt-gobject/libvirt-gobject-domain.h | 7 +++
libvirt-gobject/libvirt-gobject.sym | 4 +-
3 files changed, 90 insertions(+), 1 deletions(-)
diff --git a/libvirt-gobject/libvirt-gobject-domain.c b/libvirt-gobject/libvirt-gobject-domain.c
index 350a5b0..67ca257 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -572,6 +572,86 @@ GVirDomainInfo *gvir_domain_get_info(GVirDomain *dom,
return ret;
}
+static void
+gvir_domain_get_info_helper(GSimpleAsyncResult *res,
+ GObject *object,
+ GCancellable *cancellable G_GNUC_UNUSED)
+{
+ GVirDomain *dom = GVIR_DOMAIN(object);
+ GVirDomainInfo *info;
+ GError *err = NULL;
+
+ info = gvir_domain_get_info(dom, &err);
+ if (err)
+ g_simple_async_result_take_error(res, err);
+ else
+ g_simple_async_result_set_op_res_gpointer
+ (res,
+ info,
+ (GDestroyNotify) gvir_domain_info_free);
+}
+
+/**
+ * gvir_domain_get_info_async:
+ * @dom: the domain
+ * @cancellable: (allow-none)(transfer none): cancellation object
+ * @callback: (scope async): completion callback
+ * @user_data: (closure): opaque data for callback
+ *
+ * Asynchronous variant of #gvir_domain_get_info.
+ */
+void gvir_domain_get_info_async(GVirDomain *dom,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *res;
+
+ g_return_if_fail(GVIR_IS_DOMAIN(dom));
+
+ res = g_simple_async_result_new(G_OBJECT(dom),
+ callback,
+ user_data,
+ gvir_domain_get_info_async);
+ g_simple_async_result_run_in_thread(res,
+ gvir_domain_get_info_helper,
+ G_PRIORITY_DEFAULT,
+ cancellable);
+ g_object_unref(res);
+}
+
+/**
+ * gvir_domain_get_info_finish:
+ * @dom: the domain
+ * @result: (transfer none): async method result
+ * @err: Place-holder for possible errors
+ *
+ * Finishes the operation started by #gvir_domain_get_info_async.
+ *
+ * Returns: (transfer full): the info
+ */
+GVirDomainInfo *gvir_domain_get_info_finish(GVirDomain *dom,
+ GAsyncResult *result,
+ GError **err)
+{
+ GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT(result);
+ GVirDomainInfo *ret;
+
+ g_return_val_if_fail(GVIR_IS_DOMAIN(dom), NULL);
+ g_return_val_if_fail
+ (g_simple_async_result_is_valid(result,
+ G_OBJECT(dom),
+ gvir_domain_get_info_async),
+ NULL);
+
+ if (g_simple_async_result_propagate_error(res, err))
+ return NULL;
+
+ ret = g_simple_async_result_get_op_res_gpointer(res);
+
+ return gvir_domain_info_copy (ret);
+}
+
/**
* gvir_domain_screenshot:
* @stream: stream to use as output
diff --git a/libvirt-gobject/libvirt-gobject-domain.h b/libvirt-gobject/libvirt-gobject-domain.h
index 8a4836e..677fbe6 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -141,6 +141,13 @@ gboolean gvir_domain_reboot(GVirDomain *dom,
GVirDomainInfo *gvir_domain_get_info(GVirDomain *dom,
GError **err);
+void gvir_domain_get_info_async(GVirDomain *dom,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GVirDomainInfo *gvir_domain_get_info_finish(GVirDomain *dom,
+ GAsyncResult *result,
+ GError **err);
GVirConfigDomain *gvir_domain_get_config(GVirDomain *dom,
guint flags,
diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-gobject.sym
index 64c91cc..f43836f 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -1,4 +1,4 @@
-LIBVIRT_GOBJECT_0.0.7 {
+LIBVIRT_GOBJECT_0.0.8 {
global:
gvir_init_object;
gvir_init_object_check;
@@ -70,6 +70,8 @@ LIBVIRT_GOBJECT_0.0.7 {
gvir_domain_set_config;
gvir_domain_get_devices;
gvir_domain_get_info;
+ gvir_domain_get_info_async;
+ gvir_domain_get_info_finish;
gvir_domain_get_persistent;
gvir_domain_get_saved;
gvir_domain_screenshot;
--
1.7.7.6
12 years, 7 months
[libvirt] [PATCH V12 0/5] Add DHCP snooping support to nwfilter
by Stefan Berger
This series of patches adds DHCP snooping support to libvirt's
nwfilter subsystem.
DHCP snooping detects DHCP leases obtained by a VM and automatically
adjusts the network traffic filters to reflect the IP addresses
with which a VM may send its traffic, thus for example preventing
IP address spoofing.
Once leases on IP addresses expire or if a VM gives up on a
lease on an IP address, the filters are also adjusted.
All leases are persisted and automatically applied upon a VM's restart.
Leases are associated with the tuple of VM-UUID and interface MAC
address.
The following interface XML activates and uses the DHCP snooping:
<interface type='bridge'>
<source bridge='virbr0'/>
<filterref filter='clean-traffic'>
<parameter name='CTRL_IP_LEARNING' value='dhcp'/>
</filterref>
</interface>
Once an IP address has been detected on an interface, 'virsh dumpxml <vm>'
would show the IP address lease in the format <IP address>,<lease timeout
in seconds>:
<interface type='bridge'>
<source bridge='virbr0'/>
<filterref filter='clean-traffic'>
<parameter name='CTRL_IP_LEARNING' value='dhcp'/>
<parameter name='IP_LEASE' value='192.168.122.210,180'/>
</filterref>
</interface>
Regards,
David and Stefan
12 years, 7 months
[libvirt] Memory leak on list_domains
by Carlos Rodrigues
Hi,
I have some problems on my application with memory leak when call
list_domains method.
I'm using libvirt 0.8.3 and Sys::Virt 0.2.4 Perl Module.
Does anyone have any idea what's the problem?
Regards,
--
Carlos Rodrigues <cmar(a)eurotux.com>
Eurotux Informática, S.A. [http://eurotux.com]
12 years, 7 months
[libvirt] [libvirt-glib] Add async variant of gvir_domain_get_info()
by Zeeshan Ali (Khattak)
From: "Zeeshan Ali (Khattak)" <zeeshanak(a)gnome.org>
---
libvirt-gobject/libvirt-gobject-domain.c | 74 ++++++++++++++++++++++++++++++
libvirt-gobject/libvirt-gobject-domain.h | 7 +++
libvirt-gobject/libvirt-gobject.sym | 4 +-
3 files changed, 84 insertions(+), 1 deletions(-)
diff --git a/libvirt-gobject/libvirt-gobject-domain.c b/libvirt-gobject/libvirt-gobject-domain.c
index 0bafa7e..c1a2086 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -572,6 +572,80 @@ GVirDomainInfo *gvir_domain_get_info(GVirDomain *dom,
return ret;
}
+static void
+gvir_domain_get_info_helper(GSimpleAsyncResult *res,
+ GObject *object,
+ GCancellable *cancellable G_GNUC_UNUSED)
+{
+ GVirDomain *dom = GVIR_DOMAIN(object);
+ GVirDomainInfo *info;
+ GError *err = NULL;
+
+ info = gvir_domain_get_info(dom, &err);
+ if (err)
+ g_simple_async_result_take_error(res, err);
+ else
+ g_simple_async_result_set_op_res_gpointer(res, info, NULL);
+}
+
+/**
+ * gvir_domain_get_info_async:
+ * @dom: the domain
+ * @cancellable: (allow-none)(transfer none): cancellation object
+ * @callback: (scope async): completion callback
+ * @user_data: (closure): opaque data for callback
+ *
+ * Asynchronous variant of #gvir_domain_get_info.
+ */
+void gvir_domain_get_info_async(GVirDomain *dom,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *res;
+
+ g_return_if_fail(GVIR_IS_DOMAIN(dom));
+
+ res = g_simple_async_result_new(G_OBJECT(dom),
+ callback,
+ user_data,
+ gvir_domain_get_info_async);
+ g_simple_async_result_run_in_thread(res,
+ gvir_domain_get_info_helper,
+ G_PRIORITY_DEFAULT,
+ cancellable);
+ g_object_unref(res);
+}
+
+/**
+ * gvir_domain_get_info_finish:
+ * @dom: the domain
+ * @result: (transfer none): async method result
+ * @err: Place-holder for possible errors
+ *
+ * Finishes the operation started by #gvir_domain_get_info_async.
+ *
+ * Returns: (transfer full): the info
+ */
+GVirDomainInfo *gvir_domain_get_info_finish(GVirDomain *dom,
+ GAsyncResult *result,
+ GError **err)
+{
+ GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT(result);
+
+ g_return_val_if_fail(GVIR_IS_DOMAIN(dom), NULL);
+ g_return_val_if_fail
+ (g_simple_async_result_is_valid(result,
+ G_OBJECT(dom),
+ gvir_domain_get_info_async),
+ NULL);
+
+ if (g_simple_async_result_propagate_error(res, err))
+ return NULL;
+
+ return g_simple_async_result_get_op_res_gpointer(res);
+}
+
/**
* gvir_domain_screenshot:
* @stream: stream to use as output
diff --git a/libvirt-gobject/libvirt-gobject-domain.h b/libvirt-gobject/libvirt-gobject-domain.h
index 8a4836e..677fbe6 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -141,6 +141,13 @@ gboolean gvir_domain_reboot(GVirDomain *dom,
GVirDomainInfo *gvir_domain_get_info(GVirDomain *dom,
GError **err);
+void gvir_domain_get_info_async(GVirDomain *dom,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GVirDomainInfo *gvir_domain_get_info_finish(GVirDomain *dom,
+ GAsyncResult *result,
+ GError **err);
GVirConfigDomain *gvir_domain_get_config(GVirDomain *dom,
guint flags,
diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-gobject.sym
index 64c91cc..f43836f 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -1,4 +1,4 @@
-LIBVIRT_GOBJECT_0.0.7 {
+LIBVIRT_GOBJECT_0.0.8 {
global:
gvir_init_object;
gvir_init_object_check;
@@ -70,6 +70,8 @@ LIBVIRT_GOBJECT_0.0.7 {
gvir_domain_set_config;
gvir_domain_get_devices;
gvir_domain_get_info;
+ gvir_domain_get_info_async;
+ gvir_domain_get_info_finish;
gvir_domain_get_persistent;
gvir_domain_get_saved;
gvir_domain_screenshot;
--
1.7.7.6
12 years, 7 months
[libvirt] [libvirt-glib] Add async variant of gvir_domain_get_info()
by Zeeshan Ali (Khattak)
From: "Zeeshan Ali (Khattak)" <zeeshanak(a)gnome.org>
---
libvirt-gobject/libvirt-gobject-domain.c | 74 ++++++++++++++++++++++++++++++
libvirt-gobject/libvirt-gobject-domain.h | 7 +++
libvirt-gobject/libvirt-gobject.sym | 2 +
3 files changed, 83 insertions(+), 0 deletions(-)
diff --git a/libvirt-gobject/libvirt-gobject-domain.c b/libvirt-gobject/libvirt-gobject-domain.c
index 0bafa7e..896aae1 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -572,6 +572,80 @@ GVirDomainInfo *gvir_domain_get_info(GVirDomain *dom,
return ret;
}
+static void
+gvir_domain_get_info_helper(GSimpleAsyncResult *res,
+ GObject *object,
+ GCancellable *cancellable G_GNUC_UNUSED)
+{
+ GVirDomain *dom = GVIR_DOMAIN(object);
+ GVirDomainInfo *info;
+ GError *err = NULL;
+
+ info = gvir_domain_get_info(dom, &err);
+ if (err)
+ g_simple_async_result_take_error(res, err);
+ else
+ g_simple_async_result_set_op_res_gpointer(res, info, NULL);
+}
+
+/**
+ * gir_domain_get_info_async:
+ * @dom: the domain
+ * @cancellable: (allow-none)(transfer none): cancellation object
+ * @callback: (scope async): completion callback
+ * @user_data: (closure): opaque data for callback
+ *
+ * Asynchronous variant of #gvir_domain_get_info.
+ */
+void gvir_domain_get_info_async(GVirDomain *dom,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *res;
+
+ g_return_if_fail(GVIR_IS_DOMAIN(dom));
+
+ res = g_simple_async_result_new(G_OBJECT(dom),
+ callback,
+ user_data,
+ gvir_domain_get_info_async);
+ g_simple_async_result_run_in_thread(res,
+ gvir_domain_get_info_helper,
+ G_PRIORITY_DEFAULT,
+ cancellable);
+ g_object_unref(res);
+}
+
+/**
+ * gir_domain_get_info_finish:
+ * @dom: the domain
+ * @result: (transfer none): async method result
+ * @err: Place-holder for possible errors
+ *
+ * Finishes the operation started by #gvir_domain_get_info_async.
+ *
+ * Returns: (transfer full): the info
+ */
+GVirDomainInfo *gvir_domain_get_info_finish(GVirDomain *dom,
+ GAsyncResult *result,
+ GError **err)
+{
+ GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT(result);
+
+ g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+ g_return_val_if_fail
+ (g_simple_async_result_is_valid(result,
+ G_OBJECT(dom),
+ gvir_domain_get_info_async),
+ FALSE);
+
+ if (g_simple_async_result_propagate_error(res, err))
+ return NULL;
+
+ return g_simple_async_result_get_op_res_gpointer(res);
+}
+
/**
* gvir_domain_screenshot:
* @stream: stream to use as output
diff --git a/libvirt-gobject/libvirt-gobject-domain.h b/libvirt-gobject/libvirt-gobject-domain.h
index 8a4836e..677fbe6 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -141,6 +141,13 @@ gboolean gvir_domain_reboot(GVirDomain *dom,
GVirDomainInfo *gvir_domain_get_info(GVirDomain *dom,
GError **err);
+void gvir_domain_get_info_async(GVirDomain *dom,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GVirDomainInfo *gvir_domain_get_info_finish(GVirDomain *dom,
+ GAsyncResult *result,
+ GError **err);
GVirConfigDomain *gvir_domain_get_config(GVirDomain *dom,
guint flags,
diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-gobject.sym
index 64c91cc..00b32d4 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -70,6 +70,8 @@ LIBVIRT_GOBJECT_0.0.7 {
gvir_domain_set_config;
gvir_domain_get_devices;
gvir_domain_get_info;
+ gvir_domain_get_info_async;
+ gvir_domain_get_info_finish;
gvir_domain_get_persistent;
gvir_domain_get_saved;
gvir_domain_screenshot;
--
1.7.7.6
12 years, 7 months
[libvirt] [libvirt-glib] Correct some minor typos in docs
by Zeeshan Ali (Khattak)
From: "Zeeshan Ali (Khattak)" <zeeshanak(a)gnome.org>
---
libvirt-gobject/libvirt-gobject-domain.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/libvirt-gobject/libvirt-gobject-domain.c b/libvirt-gobject/libvirt-gobject-domain.c
index c1a2086..7fcd733 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -775,7 +775,7 @@ cleanup:
}
/**
- * gir_domain_suspend:
+ * gvir_domain_suspend:
* @dom: the domain to suspend
* @err: Place-holder for possible errors
*
@@ -857,7 +857,7 @@ gvir_domain_save_helper(GSimpleAsyncResult *res,
}
/**
- * gir_domain_save_async:
+ * gvir_domain_save_async:
* @dom: the domain to save
* @flags: extra flags, currently unused
* @cancellable: (allow-none)(transfer none): cancellation object
@@ -893,7 +893,7 @@ void gvir_domain_save_async (GVirDomain *dom,
}
/**
- * gir_domain_save_finish:
+ * gvir_domain_save_finish:
* @dom: the domain to save
* @result: (transfer none): async method result
* @err: Place-holder for possible errors
--
1.7.7.6
12 years, 7 months