Re: [PATCH] unlock eventLoop before calling callback function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Mar 07, 2011 at 11:15:38 +0000, Daniel P. Berrange wrote:
> > -        if (eventLoop.handles[i].ff)
> > +        if (eventLoop.handles[i].ff) {
> > +            virMutexUnlock(&eventLoop.lock);
> >              (eventLoop.handles[i].ff)(eventLoop.handles[i].opaque);
> > +            virMutexLock(&eventLoop.lock);
> > +        }
>
> I'm a little concerned as to whether the rest of the code in
> virEventCleanupHandles/CleanupTimeouts is safe, if we release
> the lock here. eg, if some other thread calls virEventAddTimeout
> of AddHandle, is there any way this could cause problems for us
> here. So far I think this is safe because AddTimeout/AddHandle
> will simply append to the end of the array we're iterating over,
> but would like a second opinion before ACK'ing

I don't think it's safe to unlock eventloop.lock even in the existing
Dispatch{Timeouts,Handles} cases because Add{Timeout,Handle} use realloc which
is allowed to allocate a new array, move the contents of the old one into it
and free the old array. So the for loop can easily end up accessing memory
which has already been freed.

Jirka

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list


[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]