
On Thu, 2017-07-20 at 15:46 +0200, Peter Krempa wrote:
- virBufferAsprintf(buf, "<numad nodeset='%s'/>\n", nodeset); + if (priv->autoCpuset && + !((cpuset = virBitmapFormat(priv->autoCpuset)))) + goto cleanup;
The previous implementation didn't format the <numad> element at all if there was nodeset, whereas the new one will always format it. You could add
if (!nodeset && !cpuset) goto cleanup;
If you call virBitmapFormat on an empty or NULL bitmap you still get a (empty) string allocated so that condition is basically identical to the one that's already there due to how the bitmaps are formatted:
if (!priv->autoNodeset && !priv->autoCpuset) return 0;
if (priv->autoNodeset && !((nodeset = virBitmapFormat(priv->autoNodeset)))) goto cleanup;
if (priv->autoCpuset && !((cpuset = virBitmapFormat(priv->autoCpuset)))) goto cleanup;
Oh, you're right. Nevermind then.
- if (!nodeset) + if (!nodeset && !cpuset) return 0;
I don't think you want this hunk.
With the new condition, you will perform an early exit only if both nodeset and cpuset are NULL; if nodeset is NULL but cpuset isn't, the first call to virBitmapParse() a few lines below will error out.
That shouldn't ever happen (tm) :D
I'll can add a condition that if nodeset is not in the XML the parsing will be skipped. So in that case only cpuset can be present (for future use).
I'll also add a note that accessing autoNodeset in the else branch of if (cpuset) is safe.
Works for me :) -- Andrea Bolognani / Red Hat / Virtualization