From 375c185ca8a2b4bd1ba335d8568b0067632f61a4 Mon Sep 17 00:00:00 2001 From: John Ferlan Date: Wed, 6 May 2015 10:13:54 -0400 Subject: [PATCH] conf: Expose iothreadids when delete non sequential iothreadids Since 'autofill'd iothreadid entries are not written during XML format processing, it is possible that if an iothreadid in the middle of an autofilled list would then change it's id on a subsequent restart. Thus during the iothreadid deletion, if we determine the delete is not the "last" thread, then clear the autofill bit for all iothreadid's following the one being deleted (either the first or one in the middle). This way, iothreadid's will be printed/saved. --- src/conf/domain_conf.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index add857cb97..68cac1de01 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -17476,12 +17476,21 @@ void virDomainIOThreadIDDel(virDomainDefPtr def, unsigned int iothread_id) { - int n; + size_t i, j; + + for (i = 0; i < def->niothreadids; i++) { + if (def->iothreadids[i]->iothread_id == iothread_id) { + /* If we were sequential and removed a threadid in the + * beginning or middle of the list, then unconditionally + * clear the autofill flag so we don't lose these + * definitions for XML formatting. + */ + for (j = i + 1; j < def->niothreadids; j++) + def->iothreadids[j]->autofill = false; + + virDomainIOThreadIDDefFree(def->iothreadids[i]); + VIR_DELETE_ELEMENT(def->iothreadids, i, def->niothreadids); - for (n = 0; n < def->niothreadids; n++) { - if (def->iothreadids[n]->iothread_id == iothread_id) { - virDomainIOThreadIDDefFree(def->iothreadids[n]); - VIR_DELETE_ELEMENT(def->iothreadids, n, def->niothreadids); return; } } -- GitLab