virQEMUCapsPtr
-virQEMUCapsCacheLookupByArch(virQEMUCapsCachePtr cache,
+virQEMUCapsCacheLookupByArch(virCapsPtr caps,
+ virQEMUCapsCachePtr cache,
virArch arch)
{
virQEMUCapsPtr ret = NULL;
ret = virHashSearch(cache->binaries, virQEMUCapsCompareArch, &data);
}
}
+
+ if (ret) {
+ char *binary;
+
+ if (VIR_STRDUP(binary, ret->binary) < 0) {
+ ret = NULL;
+ } else {
+ virQEMUCapsCacheValidate(cache, binary, caps, &ret);
+ VIR_FREE(binary);
+ }
+ } else {
+ virReportError(VIR_ERR_INVALID_ARG,
+ _("unable to find any emulator to serve '%s' "
+ "architecture"), virArchToString(arch));
+ }
+
virObjectRef(ret);
virMutexUnlock(&cache->lock);
virQEMUCapsCachePtr cache,
const char *binary,
const char *machineType);
-virQEMUCapsPtr virQEMUCapsCacheLookupByArch(virQEMUCapsCachePtr cache,
+virQEMUCapsPtr virQEMUCapsCacheLookupByArch(virCapsPtr caps,
+ virQEMUCapsCachePtr cache,
virArch arch);
void virQEMUCapsCacheFree(virQEMUCapsCachePtr cache);
goto cleanup;
}
} else {
- if (!(qemuCaps = virQEMUCapsCacheLookupByArch(driver->qemuCapsCache,
+ if (!(qemuCaps = virQEMUCapsCacheLookupByArch(caps,
+ driver->qemuCapsCache,
arch))) {
virReportError(VIR_ERR_INVALID_ARG,
_("unable to find any emulator to serve '%s' "