From: "Daniel P. Berrange" <berra...@redhat.com>

Annotate the fields in virQEMUDriverPtr to indicate the locking
rules for their use

Signed-off-by: Daniel P. Berrange <berra...@redhat.com>
---
 src/qemu/qemu_conf.h | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
index 4bf1be0..a224ab1 100644
--- a/src/qemu/qemu_conf.h
+++ b/src/qemu/qemu_conf.h
@@ -154,45 +154,67 @@ struct _virQEMUDriverConfig {
 struct _virQEMUDriver {
     virMutex lock;
 
+    /* Require lock to get reference on 'config',
+     * then lockless thereafter */
     virQEMUDriverConfigPtr config;
 
+    /* Immutable pointer, self-locking APIs */
     virThreadPoolPtr workerPool;
 
+    /* Atomic increment only */
     int nextvmid;
 
+    /* Immutable pointer. Unsafe APIs XXX */
     virCgroupPtr cgroup;
 
+    /* Atomic inc/dec only */
     size_t nactive;
 
+    /* Immutable pointers. Caller must provide locking */
     virStateInhibitCallback inhibitCallback;
     void *inhibitOpaque;
 
+    /* Immutable pointer, self-locking APIs */
     virDomainObjListPtr domains;
 
+    /* Lazy-load on first use. Unsafe. XXX */
     char *qemuImgBinary;
 
+    /* Immutable pointer, lockless APIs. Pointless abstraction */
     ebtablesContext *ebtables;
 
+    /* Require lock while using. Unsafe. XXX */
     virCapsPtr caps;
 
+    /* Immutable pointer, self-locking APIs */
     qemuCapsCachePtr capsCache;
 
+    /* Immutable pointer, self-locking APIs */
     virDomainEventStatePtr domainEventState;
 
+    /* Immutable pointer. Unsafe APIs. XXX */
     virSecurityManagerPtr securityManager;
 
+    /* Immutable pointers. Requires locks to be held before
+     * calling APIs. activePciHostdevs must be locked before
+     * inactivePciHostdevs */
     virPCIDeviceListPtr activePciHostdevs;
     virPCIDeviceListPtr inactivePciHostdevs;
     virUSBDeviceListPtr activeUsbHostdevs;
 
+    /* Immutable pointer. Unsafe APIs. XXX */
     virHashTablePtr sharedDisks;
 
+    /* Immutable pointer, self-locking APis */
     virPortAllocatorPtr remotePorts;
 
+    /* Immutable pointer, lockless APIs*/
     virSysinfoDefPtr hostsysinfo;
 
+    /* Immutable pointer. XXX check safety */
     virLockManagerPluginPtr lockManager;
 
+    /* Immutable pointer. Unsafe APIs. XXX */
     virHashTablePtr closeCallbacks;
 };
 
-- 
1.8.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to