On Tue, Oct 08, 2013 at 11:25:07AM -0600, Eric Blake wrote: > 'const fooPtr' is the same as 'foo * const' (the pointer won't > change, but it's contents can). But in general, if an interface > is trying to be const-correct, it should be using 'const foo *' > (the pointer is to data that can't be changed). > > Fix up offenders in src/conf/domain_conf, and their fallout. > > Several things to note: virObjectLock() requires a non-const > argument; if this were C++, we could treat the locking field > as 'mutable' and allow locking an otherwise 'const' object, but > that is a more invasive change, so I instead dropped attempts > to be const-correct on domain lookup. virXMLPropString and > friends require a non-const xmlNodePtr - this is because libxml2 > is not a const-correct library. We could make the src/util/virxml > wrappers cast away const, but I figured it was easier to not > try to mark xmlNodePtr as const. Finally, virDomainDeviceDefCopy > was a rather hard conversion - it calls virDomainDeviceDefPostParse, > which in turn in the xen driver was actually modifying the domain > outside of the current device being visited. We should not be > adding a device on the first per-device callback, but waiting until > after all per-device callbacks are complete. > > * src/conf/domain_conf.h (virDomainObjListFindByID) > (virDomainObjListFindByUUID, virDomainObjListFindByName) > (virDomainObjAssignDef, virDomainObjListAdd): Drop attempt at > const. > (virDomainDeviceDefCopy): Use intended type. > (virDomainDeviceDefParse, virDomainDeviceDefPostParseCallback) > (virDomainVideoDefaultType, virDomainVideoDefaultRAM) > (virDomainChrGetDomainPtrs): Make const-correct. > * src/conf/domain_conf.c (virDomainObjListFindByID) > (virDomainObjListFindByUUID, virDomainObjListFindByName) > (virDomainDeviceDefCopy, virDomainObjListAdd) > (virDomainObjAssignDef, virDomainHostdevSubsysUsbDefParseXML) > (virDomainHostdevSubsysPciOrigStatesDefParseXML) > (virDomainHostdevSubsysPciDefParseXML) > (virDomainHostdevSubsysScsiDefParseXML) > (virDomainControllerModelTypeFromString) > (virDomainTPMDefParseXML, virDomainTimerDefParseXML) > (virDomainSoundCodecDefParseXML, virDomainSoundDefParseXML) > (virDomainWatchdogDefParseXML, virDomainRNGDefParseXML) > (virDomainMemballoonDefParseXML, virDomainNVRAMDefParseXML) > (virSysinfoParseXML, virDomainVideoAccelDefParseXML) > (virDomainVideoDefParseXML, virDomainHostdevDefParseXML) > (virDomainRedirdevDefParseXML) > (virDomainRedirFilterUsbDevDefParseXML) > (virDomainRedirFilterDefParseXML, virDomainIdMapEntrySort) > (virDomainIdmapDefParseXML, virDomainVcpuPinDefParseXML) > (virDiskNameToBusDeviceIndex, virDomainDeviceDefCopy) > (virDomainVideoDefaultType, virDomainHostdevAssignAddress) > (virDomainDeviceDefPostParseInternal, virDomainDeviceDefPostParse) > (virDomainChrGetDomainPtrs, virDomainControllerSCSINextUnit) > (virDomainSCSIDriveAddressIsUsed) > (virDomainDriveAddressIsUsedByDisk) > (virDomainDriveAddressIsUsedByHostdev): Fix fallout. > * src/openvz/openvz_driver.c (openvzDomainDeviceDefPostParse): > Likewise. > * src/libxl/libxl_domain.c (libxlDomainDeviceDefPostParse): > Likewise. > * src/qemu/qemu_domain.c (qemuDomainDeviceDefPostParse) > (qemuDomainDefaultNetModel): Likewise. > * src/lxc/lxc_domain.c (virLXCDomainDeviceDefPostParse): > Likewise. > * src/uml/uml_driver.c (umlDomainDeviceDefPostParse): Likewise. > * src/xen/xen_driver.c (xenDomainDeviceDefPostParse): Split... > (xenDomainDefPostParse): ...since per-device callback is not the > time to be adding a device. > > Signed-off-by: Eric Blake <eblake@xxxxxxxxxx> > --- > src/conf/domain_conf.c | 94 ++++++++++++++++++++++++---------------------- > src/conf/domain_conf.h | 24 +++++++----- > src/libxl/libxl_domain.c | 2 +- > src/lxc/lxc_domain.c | 4 +- > src/openvz/openvz_driver.c | 2 +- > src/qemu/qemu_domain.c | 5 ++- > src/uml/uml_driver.c | 6 +-- > src/xen/xen_driver.c | 12 +++++- > 8 files changed, 84 insertions(+), 65 deletions(-) ACK 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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list