Libvirt provides a portable, long term stable C API for managing the virtualization technologies provided by many operating systems. It includes support for QEMU, KVM, Xen, LXC, bhyve, Virtuozzo, VMware vCenter and ESX, VMware Desktop, Hyper-V, VirtualBox and the POWER Hypervisor.
Go to file
Eric Blake cb231b4bee snapshot: avoid crash when deleting qemu snapshots
This one's nasty.  Ever since we fixed virHashForEach to prevent
nested hash iterations for safety reasons (commit fba550f6),
virDomainSnapshotDelete with VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN
has been broken for qemu: it deletes children, while leaving
grandchildren intact but pointing to a no-longer-present parent.
But even before then, the code would often appear to succeed to
clean up grandchildren, but risked memory corruption if you have
a large and deep hierarchy of snapshots.

For acting on just children, a single virHashForEach is sufficient.
But for acting on an entire subtree, it requires iteration; and
since we declared recursion as invalid, we have to switch to a
while loop.  Doing this correctly requires quite a bit of overhaul,
so I added a new helper function to isolate the algorithm from the
actions, so that callers do not have to reinvent the iteration.

Note that this _still_ does not handle CHILDREN correctly if one
of the children is the current snapshot; that will be next.

* src/conf/domain_conf.h (_virDomainSnapshotDef): Add mark.
(virDomainSnapshotForEachDescendant): New prototype.
* src/libvirt_private.syms (domain_conf.h): Export it.
* src/conf/domain_conf.c (virDomainSnapshotMarkDescendant)
(virDomainSnapshotActOnDescendant)
(virDomainSnapshotForEachDescendant): New functions.
* src/qemu/qemu_driver.c (qemuDomainSnapshotDiscardChildren):
Replace...
(qemuDomainSnapshotDiscardDescenent): ...with callback that
doesn't nest hash traversal.
(qemuDomainSnapshotDelete): Use new function.
2011-09-02 16:04:32 -06:00
.gnulib@a6b16b69fe build: fix compilation on mingw64 2011-08-19 07:20:10 -06:00
daemon libvirtd: create run dir when running at non-root user 2011-09-01 20:32:10 -06:00
docs Add "redirdev" redirection device 2011-09-02 23:39:03 +08:00
examples snapshot: better events when starting paused 2011-09-02 10:00:06 -06:00
gnulib freebsd: Fix build problem due to picking up the wrong libvirt.h 2011-07-29 07:35:54 -06:00
include snapshot: fine-tune ability to start paused 2011-09-02 10:00:06 -06:00
m4 tests: Lower stack usage below 4096 bytes 2011-04-30 19:59:52 +02:00
po hyperv: Add basic driver for Microsoft Hyper-V 2011-08-26 17:52:55 +02:00
python Add public API for getting migration speed 2011-09-01 11:26:21 -06:00
src snapshot: avoid crash when deleting qemu snapshots 2011-09-02 16:04:32 -06:00
tests Learn to use spicevmc as a redirection type for usb-redir 2011-09-02 23:39:03 +08:00
tools snapshot: add snapshot-list --parent to virsh 2011-09-02 15:52:06 -06:00
.dir-locals.el maint: let emacs avoid tabs in rng files 2011-08-13 08:56:26 -06:00
.gitignore hyperv: Add OpenWSMAN based client for the Hyper-V WMI API 2011-08-26 17:52:55 +02:00
.gitmodules make .gnulib a submodule 2009-07-08 16:17:51 +02:00
.mailmap Change my email domain 2011-09-01 16:13:34 -06:00
AUTHORS libvirtd: create run dir when running at non-root user 2011-09-01 20:32:10 -06:00
autobuild.sh Remove the Open Nebula driver 2011-03-28 14:09:11 +01:00
autogen.sh build: avoid problems with autogen.sh runs from tarball 2011-02-12 06:28:28 -07:00
bootstrap build: fix compilation on mingw64 2011-08-19 07:20:10 -06:00
bootstrap.conf Add API for duplicating a socket/client file descriptor 2011-08-15 15:21:26 +02:00
cfg.mk hyperv: Add driver skeleton 2011-08-26 17:52:55 +02:00
ChangeLog-old generate ChangeLog from git logs into distribution tarball 2009-07-08 16:17:51 +02:00
configure.ac storage: Add mkfs and libblkid to build system 2011-09-02 21:16:50 +08:00
COPYING.LIB remove all trailing blank lines 2009-07-16 15:06:42 +02:00
HACKING build: rename files.h to virfile.h 2011-07-21 10:34:51 -06:00
libvirt.pc.in * libvirt.pc.in: applied patch from Daniel Berrange to fix --cflags 2006-03-24 13:18:12 +00:00
libvirt.spec.in storage: Add mkfs and libblkid to build system 2011-09-02 21:16:50 +08:00
Makefile.am maint: add missing copyright notices 2011-07-28 15:01:17 -06:00
Makefile.nonreentrant Ban use of all inet_* functions 2010-10-22 11:59:23 +01:00
mingw32-libvirt.spec.in conf: put virtPortProfile struct / functions in a common location 2011-07-21 14:46:33 -04:00
README Correct typos in the documentation (Atsushi SAKAI) 2008-01-24 10:15:13 +00:00
README-hacking maint: relax git minimum version 2010-02-24 14:29:27 -05:00
TODO Update todo list file to point at bugzilla/website 2010-10-13 16:45:26 +01:00

         LibVirt : simple API for virtualization

  Libvirt is a C toolkit to interact with the virtualization capabilities
of recent versions of Linux (and other OSes). It is free software
available under the GNU Lesser General Public License. Virtualization of
the Linux Operating System means the ability to run multiple instances of
Operating Systems concurrently on a single hardware system where the basic
resources are driven by a Linux instance. The library aim at providing
long term stable C API initially for the Xen paravirtualization but
should be able to integrate other virtualization mechanisms if needed.

Daniel Veillard <veillard@redhat.com>