[libvirt] [PATCH] Fix buzzilla 738778

Stefan Berger stefanb at linux.vnet.ibm.com
Fri Sep 16 13:49:20 UTC 2011


On 09/16/2011 09:39 AM, Daniel Veillard wrote:
> On Fri, Sep 16, 2011 at 09:03:30AM -0400, Stefan Berger wrote:
>> This patch fixes the bug shown in bugzilla 738778. It's not an
>> nwfilter problem but a connection sharing / closure issue.
>>
>> https://bugzilla.redhat.com/show_bug.cgi?id=738778
>>
>> Depending on the speed / #CPUs of the machine you are using you may
>> not see this bug all the time.
>>
>> Signed-off-by: Stefan Berger<stefanb at linux.vnet.ibm.com>
>>
>> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
>> index f8a8475..1991777 100644
>> --- a/src/qemu/qemu_process.c
>> +++ b/src/qemu/qemu_process.c
>> @@ -2539,6 +2539,10 @@ struct qemuProcessReconnectData {
>>   /*
>>    * Open an existing VM's monitor, re-detect VCPU threads
>>    * and re-reserve the security labels in use
>> + *
>> + * We own the virConnectPtr we are passed here - whoever started
>> + * this thread function has increased the reference counter to it
>> + * so that we now have to close it.
>>    */
>>   static void
>>   qemuProcessReconnect(void *opaque)
>> @@ -2632,6 +2636,8 @@ qemuProcessReconnect(void *opaque)
>>
>>       qemuDriverUnlock(driver);
>>
>> +    virConnectClose(conn);
>> +
>>       return;
>>
>>   error:
>> @@ -2656,6 +2662,8 @@ error:
>>               virDomainObjUnlock(obj);
>>       }
>>       qemuDriverUnlock(driver);
>> +
>> +    virConnectClose(conn);
>>   }
>>
>>   static void
>> @@ -2706,7 +2714,16 @@ qemuProcessReconnectHelper(void *payload,
>>       if (qemuDomainObjBeginJobWithDriver(src->driver, obj,
>> QEMU_JOB_MODIFY)<  0)
>>           goto error;
>>
>> +    /* Since we close the connection later on, we have to make sure
>> +     * that the threads we start see a valid connection throughout their
>> +     * lifetime. We simply increase the reference counter here.
>> +     */
>> +    virConnectRef(data->conn);
>> +
>>       if (virThreadCreate(&thread, true, qemuProcessReconnect, data)<  0) {
>> +
>> +        virConnectClose(data->conn);
>> +
>>           qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>>                           _("Could not create thread. QEMU initialization "
>>                             "might be incomplete"));
>    That sounds like a nasty bug and hard to track !
> I think this makes sense, hopefully I'm right :-)
At least I don't see it anymore. Hopefully Laine is down to 0% from 100% 
of seeing this one.
> ACK, please push !
>
Pushed.

    Stefan

> Daniel
>




More information about the libvir-list mailing list