The following huge series of patches adds thread safety for the libvirtd daemon and drivers, and makes the daemon multi-threaded in processing RPC calls. This enables multiple clients to be processed in parallel, without blocking each other. It does not change the thread rules for the virConnectPtr object though, so each individual client is still serialized. There are two core places where we have to have synchronization in the threading model this patch series introduces - The libvirt daemon code - A single global server lock (aka struct qemud_server) - One lock per client connection (aka struct qemud_client) - The driver implementations - One lock per driver (aka QEMU, LXC, Test, UML, OpenVZ, Network, Storage, Node Devices) - One lock per primary object in a driver (virDomainObjPtr, virNetworkObjPtr, virStoragePoolObjPtr, virNodeDeviceObjptr instances) For most cases, the big global server / driver locks are only held while obtaining one of the finer grained locks. This gives a fairly good level of concurrency for operations touching different objects. Once this core infrastructure is merged, it will be possible to iterate on impl of drivers to reduce the time locks are held - eg avoid holding a lock while talking to the QEMU monitor interface. To try and make it easier to spot thread locking problems this series refactors alot of methods so that there is only a single return point where the unlock call can be placed, rather than multiple return point which increases the chances of missing an unlock call. This touches a huge amount of code, so I'd like to get this all merged ASAP as it'll be really hard to keep it synced with ongoing changes. Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list