diff --git a/ChangeLog b/ChangeLog index c556ce3fd33569e6d3384c14ef0ed39aae7d3db4..2ab74af998e79ca639cd82804ce9535c4e4bb88f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed May 6 10:19:36 EDT 2009 Cole Robinson + + * src/qemu_driver.c : Refresh QEMU driver capabilities for each + getCapabilities call. + Wed May 6 15:42:08 CEST 2009 Daniel Veillard * src/vbox/vbox_driver.c src/vbox/vbox_tmpl.c: changes in diff --git a/src/qemu_driver.c b/src/qemu_driver.c index a63a8cb04b1b85d887cb0c209fc3c5fde1ed82b6..589802613cb921c42c8f219652b09bdf8dd75ae3 100644 --- a/src/qemu_driver.c +++ b/src/qemu_driver.c @@ -1872,10 +1872,12 @@ static int qemudGetNodeInfo(virConnectPtr conn, static char *qemudGetCapabilities(virConnectPtr conn) { struct qemud_driver *driver = conn->privateData; - char *xml; + char *xml = NULL; qemuDriverLock(driver); - if ((xml = virCapabilitiesFormatXML(driver->caps)) == NULL) + virCapabilitiesFree(qemu_driver->caps); + if ((qemu_driver->caps = qemudCapsInit()) == NULL || + (xml = virCapabilitiesFormatXML(driver->caps)) == NULL) virReportOOMError(conn); qemuDriverUnlock(driver); @@ -3156,20 +3158,26 @@ cleanup: return ret; } -static int qemudNodeGetSecurityModel(virConnectPtr conn, virSecurityModelPtr secmodel) +static int qemudNodeGetSecurityModel(virConnectPtr conn, + virSecurityModelPtr secmodel) { struct qemud_driver *driver = (struct qemud_driver *)conn->privateData; char *p; + int ret = 0; - if (!driver->securityDriver) - return -2; + qemuDriverLock(driver); + if (!driver->securityDriver) { + ret = -2; + goto cleanup; + } p = driver->caps->host.secModel.model; if (strlen(p) >= VIR_SECURITY_MODEL_BUFLEN-1) { qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("security model string exceeds max %d bytes"), VIR_SECURITY_MODEL_BUFLEN-1); - return -1; + ret = -1; + goto cleanup; } strcpy(secmodel->model, p); @@ -3178,10 +3186,14 @@ static int qemudNodeGetSecurityModel(virConnectPtr conn, virSecurityModelPtr sec qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("security DOI string exceeds max %d bytes"), VIR_SECURITY_DOI_BUFLEN-1); - return -1; + ret = -1; + goto cleanup; } strcpy(secmodel->doi, p); - return 0; + +cleanup: + qemuDriverUnlock(driver); + return ret; } /* TODO: check seclabel restore */