
On Wed, Jul 17, 2013 at 03:04:19PM +0200, Michal Privoznik wrote:
Currently the virLXCDriverPtr struct contains an wide variety of data with varying access needs. Move all the static config data into a dedicated virLXCDriverConfigPtr object. The only locking requirement is to hold the driver lock, while obtaining an instance of virLXCDriverConfigPtr. Once a reference is held on the config object, it can be used completely lockless since it is immutable.
NB, not all APIs correctly hold the driver lock while getting a reference to the config object in this patch. This is safe for now since the config is never updated on the fly. Later patches will address this fully. --- src/lxc/lxc_conf.c | 81 +++++++++++++++++++++------- src/lxc/lxc_conf.h | 41 +++++++++----- src/lxc/lxc_driver.c | 145 ++++++++++++++++++++++++++++++++++---------------- src/lxc/lxc_process.c | 39 +++++++++----- 4 files changed, 214 insertions(+), 92 deletions(-) diff --git a/src/lxc/lxc_conf.h b/src/lxc/lxc_conf.h index 5a5b9aa..6ca6198 100644 --- a/src/lxc/lxc_conf.h +++ b/src/lxc/lxc_conf.h @@ -46,44 +46,57 @@ typedef struct _virLXCDriver virLXCDriver; typedef virLXCDriver *virLXCDriverPtr;
+typedef struct _virLXCDriverConfig virLXCDriverConfig; +typedef virLXCDriverConfig *virLXCDriverConfigPtr; + +struct _virLXCDriverConfig { + virObject parent; + + char *configDir; + char *autostartDir; + char *stateDir; + char *logDir; + int log_libvirtd; + int have_netns; + + char *securityDriverName; + bool securityDefaultConfined; + bool securityRequireConfined; +}; + struct _virLXCDriver { virMutex lock;
+ virLXCDriverConfigPtr config; + virCapsPtr caps; - virDomainXMLOptionPtr xmlopt;
virCgroupPtr cgroup;
+ virDomainXMLOptionPtr xmlopt; +
If I'm being fussy I'd say you shouldn't be moving the 'xmlopt' field in this patch.
virSysinfoDefPtr hostsysinfo;
size_t nactive; + virStateInhibitCallback inhibitCallback; void *inhibitOpaque;
virDomainObjListPtr domains; - char *configDir; - char *autostartDir; - char *stateDir; - char *logDir; - int log_libvirtd; - int have_netns;
virUSBDeviceListPtr activeUsbHostdevs;
virDomainEventStatePtr domainEventState;
- char *securityDriverName; - bool securityDefaultConfined; - bool securityRequireConfined; virSecurityManagerPtr securityManager;
- /* Mapping of 'char *uuidstr' -> virConnectPtr - * of guests which will be automatically killed - * when the virConnectPtr is closed*/
Nor removing this comment, until the later patch which changes this field to use the generic callbacks.
virHashTablePtr autodestroy; };
ACK anyway. This code pattern matches what was done in the QEMU driver which has proved itself succesful. Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|