Last year Hu Tao posted a series which introduced a virObject type and converted the QEMU driver to use this for some of its objects https://www.redhat.com/archives/libvir-list/2011-April/msg00316.html While the idea was generally encouraged, the impl was never updated with review feedback, although some of the atomic ops code was updated and merged. This series is an attempt to address the same problem. The significant things in this series - Instead of storing a 'destroy' pointer in virObject itself, introduce a separate 'virClass' concept. As we add more functionality to virObject, the benefit of not duplicating class-level data in each object instance will be great - The virObject APIs take a 'void *' instead of virObjectPtr to avoid the need to litter the code with casts, albeit at a slight loss in compile time type safety checking - Replace our current atomic ops code with GLib's impl which is more complete, in particular it has Win32 support - Add a macro to facilitate creating one-time init functions usig virOnce - Convert all our public API objects to use this new code - Convert all code in src/rpc, src/conf and src/qemu to the new object APIs In the future the things I plan to do are - Add a mutex to virObject - nearly all subclasses make use of a mutex, so it makes sense to provide one in the base class - Add generic support for callbacks. Currently each module deals with callbacks in a rather adhoc fashion. THis will create something similar in concept to GLib's 'signal' capabilities, though somewhat simpler. .gitignore | 1 configure.ac | 59 ++ daemon/libvirtd.c | 27 - daemon/remote.c | 8 daemon/stream.c | 19 src/Makefile.am | 7 src/conf/domain_conf.c | 59 -- src/conf/domain_conf.h | 8 src/conf/domain_event.c | 8 src/datatypes.c | 999 ++++++++------------------------------ src/datatypes.h | 264 +++------- src/libvirt.c | 131 +--- src/libvirt_atomic.syms | 3 src/libvirt_private.syms | 42 - src/libvirt_probes.d | 31 - src/libxl/libxl_driver.c | 6 src/lxc/lxc_controller.c | 8 src/nwfilter/nwfilter_dhcpsnoop.c | 48 - src/openvz/openvz_conf.c | 17 src/phyp/phyp_driver.c | 14 src/qemu/qemu_agent.c | 86 +-- src/qemu/qemu_agent.h | 3 src/qemu/qemu_command.c | 2 src/qemu/qemu_domain.c | 49 - src/qemu/qemu_domain.h | 8 src/qemu/qemu_driver.c | 2 src/qemu/qemu_migration.c | 34 - src/qemu/qemu_migration.h | 4 src/qemu/qemu_monitor.c | 97 +-- src/qemu/qemu_monitor.h | 3 src/qemu/qemu_process.c | 52 - src/remote/remote_driver.c | 26 src/rpc/gendispatch.pl | 4 src/rpc/virkeepalive.c | 73 +- src/rpc/virkeepalive.h | 4 src/rpc/virnetclient.c | 117 +--- src/rpc/virnetclient.h | 4 src/rpc/virnetclientprogram.c | 43 - src/rpc/virnetclientprogram.h | 5 src/rpc/virnetclientstream.c | 65 +- src/rpc/virnetclientstream.h | 5 src/rpc/virnetsaslcontext.c | 106 +--- src/rpc/virnetsaslcontext.h | 8 src/rpc/virnetserver.c | 82 +-- src/rpc/virnetserver.h | 5 src/rpc/virnetserverclient.c | 134 ++--- src/rpc/virnetserverclient.h | 5 src/rpc/virnetserverprogram.c | 49 - src/rpc/virnetserverprogram.h | 8 src/rpc/virnetserverservice.c | 97 +-- src/rpc/virnetserverservice.h | 5 src/rpc/virnetsocket.c | 85 +-- src/rpc/virnetsocket.h | 3 src/rpc/virnettlscontext.c | 110 +--- src/rpc/virnettlscontext.h | 10 src/storage/storage_driver.c | 4 src/util/logging.c | 54 -- src/util/logging.h | 2 src/util/threads.h | 49 + src/util/viratomic.c | 35 + src/util/viratomic.h | 424 +++++++++++++--- src/util/virfile.c | 4 src/util/virnodesuspend.c | 25 src/util/virnodesuspend.h | 1 src/util/virobject.c | 203 +++++++ src/util/virobject.h | 60 ++ src/vbox/vbox_tmpl.c | 2 src/vmware/vmware_conf.c | 4 src/xen/xend_internal.c | 4 tests/Makefile.am | 5 tests/qemuxml2argvtest.c | 21 tests/qemuxmlnstest.c | 2 tests/sexpr2xmltest.c | 2 tests/viratomictest.c | 180 ++++++ tests/virnetsockettest.c | 26 tests/virnettlscontexttest.c | 10 tests/xmconfigtest.c | 4 77 files changed, 2105 insertions(+), 2168 deletions(-) -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list