Create a separate local API that will fill in the iothreadid array
entries that were not defined by <iothread id='#'> entries in the XML.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/conf/domain_conf.c | 47 +++++++++++++++++++++++++++++++----------------
1 file changed, 31 insertions(+), 16 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 65e0d8e..217179d 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -2329,6 +2329,35 @@ virDomainIOThreadIDDefArrayFree(virDomainIOThreadIDDefPtr *def,
}
+static int
+virDomainIOThreadIDDefArrayInit(virDomainDefPtr def)
+{
+ unsigned int iothread_id = 1;
+ int retval = -1;
+
+ /* Same value (either 0 or some number), then we have none to fill in or
+ * the iothreadid array was filled from the XML
+ */
+ if (def->iothreads == def->niothreadids)
+ return 0;
+
+ while (def->niothreadids != def->iothreads) {
+ if (!virDomainIOThreadIDFind(def, iothread_id)) {
+ virDomainIOThreadIDDefPtr iothrid;
+
+ if (!(iothrid = virDomainIOThreadIDAdd(def, iothread_id)))
+ goto error;
+ iothrid->autofill = true;
+ }
+ iothread_id++;
+ }
+ retval = 0;
+
+ error:
+ return retval;
+}
+
+
void
virDomainPinDefFree(virDomainPinDefPtr def)
{
@@ -14979,22 +15008,8 @@ virDomainDefParseXML(xmlDocPtr xml,
}
VIR_FREE(nodes);
- /* If no iothreadid's or not fully populated, let's finish the job
- * here rather than in PostParseCallback
- */
- if (def->iothreads && def->iothreads != def->niothreadids) {
- unsigned int iothread_id = 1;
- while (def->niothreadids != def->iothreads) {
- if (!virDomainIOThreadIDFind(def, iothread_id)) {
- virDomainIOThreadIDDefPtr iothrid;
-
- if (!(iothrid = virDomainIOThreadIDAdd(def, iothread_id)))
- goto error;
- iothrid->autofill = true;
- }
- iothread_id++;
- }
- }
+ if (virDomainIOThreadIDDefArrayInit(def) < 0)
+ goto error;
/* Extract cpu tunables. */
if ((n = virXPathULong("string(./cputune/shares[1])", ctxt,
--
2.1.0