[libvirt] [PATCH 2/2] avoid closing monitor twice
Wen Congyang
wency at cn.fujitsu.com
Wed Jan 26 01:29:17 UTC 2011
At 01/26/2011 12:46 AM, Eric Blake Write:
> On 01/24/2011 11:57 PM, Wen Congyang wrote:
>> + if (mon->closed) {
>> + /* We have closed monitor in other thread. */
>> + qemuMonitorUnlock(mon);
>> + return;
>> + }
>> +
>> + mon->closed = true;
>> +
>> if (mon->fd >= 0) {
>
> Why can't mon->fd >= 0 be the flag of whether close has previously been
> attempted? After all, once the handle gets removed, VIR_FORCE_CLOSE
> sets mon->fd to -1.
We may call qemuMonitorClose() in the function qemuMonitorOpen() to do
the cleanup when it failed. So we still need to close the monitor if
mon->fd is -1.
>
>> if (mon->watch)
>> virEventRemoveHandle(mon->watch);
>
> Making qemuMonitorClose() do a short-circuit no-op if we already detect
> that another thread has requested close worries me that we might leak
> the resource (because we are bypassing the reference counter). Is there
> instead somewhere that we should be temporarily increasing the reference
> counter?
If we open the monitor successfully, we hold 2 refs: one for open, and another
one for watch. So I think that that we only close monitor once may not leak the
resource.
>
> This patch may be correct as-is, but I'm not sure of it yet.
>
More information about the libvir-list
mailing list