<div dir="ltr">Please ignore this patch, I failed to see that in 2 out of 4 locations we already are looking at the value. I'm sending a better patch instead.</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Feb 14, 2017 at 4:48 PM, Leonid Podolny <span dir="ltr"><<a href="mailto:leonid@podolny.net" target="_blank">leonid@podolny.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">In PinVcpu(), PinVcpuFlags(), PinEmulator() and PinIOThread() there is<br>
an almost identical code that converts []bool into a bitmask. It<br>
calculates the location in the bitmask and then sets it always to 1,<br>
instead of looking at the actual bool value.<br>
---<br>
 domain.go | 16 ++++++++++++----<br>
 1 file changed, 12 insertions(+), 4 deletions(-)<br>
<br>
diff --git a/domain.go b/domain.go<br>
index 5482f1a..9a24bc5 100644<br>
--- a/domain.go<br>
+++ b/domain.go<br>
@@ -1750,7 +1750,9 @@ func (d *Domain) PinVcpu(vcpu uint, cpuMap []bool) error {<br>
                if cpuMap[i] {<br>
                        byte := i / 8<br>
                        bit := i % 8<br>
-                       ccpumap[byte] |= (1 << uint(bit))<br>
+                       if cpuMap[i] {<br>
+                               ccpumap[byte] |= (1 << uint(bit))<br>
+                       }<br>
                }<br>
        }<br>
<br>
@@ -1770,7 +1772,9 @@ func (d *Domain) PinVcpuFlags(vcpu uint, cpuMap []bool, flags DomainModification<br>
                if cpuMap[i] {<br>
                        byte := (i + 7) / 8<br>
                        bit := i % 8<br>
-                       ccpumap[byte] |= (1 << uint(bit))<br>
+                       if cpuMap[i] {<br>
+                               ccpumap[byte] |= (1 << uint(bit))<br>
+                       }<br>
                }<br>
        }<br>
<br>
@@ -3970,7 +3974,9 @@ func (d *Domain) PinEmulator(cpumap []bool, flags DomainModificationImpact) erro<br>
                byte := i / 8<br>
                bit := i % 8<br>
<br>
-               ccpumaps[byte] |= (1 << uint(bit))<br>
+               if cpumap[i] {<br>
+                       ccpumaps[byte] |= (1 << uint(bit))<br>
+               }<br>
        }<br>
<br>
        ret := C.virDomainPinEmulator(d.ptr, &ccpumaps[0], C.int(maplen), C.uint(flags))<br>
@@ -3992,7 +3998,9 @@ func (d *Domain) PinIOThread(iothreadid uint, cpumap []bool, flags DomainModific<br>
                byte := i / 8<br>
                bit := i % 8<br>
<br>
-               ccpumaps[byte] |= (1 << uint(bit))<br>
+               if cpumap[i] {<br>
+                       ccpumaps[byte] |= (1 << uint(bit))<br>
+               }<br>
        }<br>
<br>
        ret := C.virDomainPinIOThreadCompat(<wbr>d.ptr, C.uint(iothreadid), &ccpumaps[0], C.int(maplen), C.uint(flags))<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.11.0<br>
<br>
</font></span></blockquote></div><br></div>