priv->originalMemlock = 0;
priv->preMigrationMemlock = 0;
+
+ virHashRemoveAll(priv->statsSchema);
}
g_object_unref(priv->eventThread);
}
+ if (priv->statsSchema)
+ g_clear_pointer(&priv->statsSchema, g_hash_table_destroy);
+
g_free(priv);
}
priv->migMaxBandwidth = QEMU_DOMAIN_MIG_BANDWIDTH_MAX;
priv->driver = opaque;
+ priv->statsSchema = NULL;
+
return g_steal_pointer(&priv);
}
return 0;
}
+
+
+/**
+ * virDomainRefreshStatsSchema:
+ * @driver: qemu driver data
+ * @vm: Pointer to the vm object
+ *
+ * Load data into dom->privateData->statsSchema if not stored
+ *
+ * Returns -1 on failure, 0 otherwise.
+ */
+int
+qemuDomainRefreshStatsSchema(virDomainObj *dom)
+{
+ qemuDomainObjPrivate *priv = dom->privateData;
+ GHashTable *schema = priv->statsSchema;
+
+ if (schema && g_hash_table_size(schema) > 0)
+ return 0;
+
+ if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_QUERY_STATS_SCHEMAS))
+ return -1;
+
+ qemuDomainObjEnterMonitor(dom);
+ schema = qemuMonitorQueryStatsSchema(priv->mon, QEMU_MONITOR_QUERY_STATS_PROVIDER_LAST);
+ qemuDomainObjExitMonitor(dom);
+
+ if (!schema)
+ return -1;
+
+ g_hash_table_unref(priv->statsSchema);
+ priv->statsSchema = schema;
+
+ return 0;
+}
unsigned long long originalMemlock; /* Original RLIMIT_MEMLOCK, zero if no
* restore will be required later */
+
+ GHashTable *statsSchema; /* (name, data) pair for stats */
};
#define QEMU_DOMAIN_PRIVATE(vm) \
int
qemuDomainObjWait(virDomainObj *vm);
+
+int
+qemuDomainRefreshStatsSchema(virDomainObj *dom);