This series adds a virObject structure that manages reference-counting.
Some notes about referece-counting introduced by this series:
A thread owns a virObject by incrementing its reference-count by 1.
If a thread owns a virObject, the virObject is guarenteed not be
freed until the thread releases ownership by decrementing its
reference-count by 1. A thread can't access a virObject after it
releases the ownership of virObject because it can be freed at
anytime.
A thread can own a virObject legally in these ways:
- a thread owns a virObject that it creates.
- a thread owns a virObject if another thread passes the ownership
to it. Example: qemuMonitorOpen
- a thread gets a virObject from a container.
Example: virDomainFindByUUID
- a container owns a virObject by incrementing its reference-count
by 1 before adding it to the container
- if a virObject is removed from a container its reference-count
must be decremented by 1
By following these rules, there is no need to protect operations on
an object's reference-count by an external lock. (like in old ways
virDomainObj lock protects qemu monitor's ref-count.)
This series is a draft and posted for early review. Any comments are
welcome.
Hu Tao (6):
Add virObject and virAtomic.
use virObject to manage reference-count of qemud_client
use virObject to manage reference-count of virDomainObj
qemu: use virObject to manages reference-counting for qemu monitor
remove qemuDomainObjEnterMonitorWithDriver and
qemuDomainObjExitMonitorWithDriver
remove qemuDomainObjBeginJobWithDriver
daemon/dispatch.c | 2 -
daemon/libvirtd.c | 62 ++++++--
daemon/libvirtd.h | 5 +-
src/Makefile.am | 2 +
src/conf/domain_conf.c | 56 ++++----
src/conf/domain_conf.h | 6 +-
src/libvirt_private.syms | 5 +
src/openvz/openvz_conf.c | 8 +-
src/qemu/qemu_domain.c | 121 +--------------
src/qemu/qemu_domain.h | 8 +-
src/qemu/qemu_driver.c | 358 ++++++++++++++++++++-------------------------
src/qemu/qemu_hotplug.c | 90 ++++++------
src/qemu/qemu_migration.c | 101 ++++++-------
src/qemu/qemu_monitor.c | 109 ++++++++-------
src/qemu/qemu_monitor.h | 4 +-
src/qemu/qemu_process.c | 99 ++++++-------
src/util/viratomic.c | 46 ++++++
src/util/viratomic.h | 30 ++++
src/util/virobject.c | 52 +++++++
src/util/virobject.h | 39 +++++
src/vmware/vmware_conf.c | 2 +-
21 files changed, 628 insertions(+), 577 deletions(-)
create mode 100644 src/util/viratomic.c
create mode 100644 src/util/viratomic.h
create mode 100644 src/util/virobject.c
create mode 100644 src/util/virobject.h
--
1.7.3.1