[libvirt] [PATCH] virLXCMonitorClose: Unlock domain while closing monitor
Daniel P. Berrange
berrange at redhat.com
Wed Jul 24 11:55:53 UTC 2013
On Wed, Jul 24, 2013 at 01:43:02PM +0200, Michal Privoznik wrote:
> On 24.07.2013 12:29, Daniel P. Berrange wrote:
> > On Wed, Jul 24, 2013 at 12:15:32PM +0200, Michal Privoznik wrote:
> >> There's a race in lxc driver causing a deadlock. If a domain is
> >> destroyed immediately after started, the deadlock can occur. When domain
> >> is started, the even loop tries to connect to the monitor. If the
> >> connecting succeeds, virLXCProcessMonitorInitNotify() is called with
> >> @mon->client locked. The first thing that callee does, is
> >> virObjectLock(vm). So the order of locking is: 1) @mon->client, 2) @vm.
> >>
> >> However, if there's another thread executing virDomainDestroy on the
> >> very same domain, the first thing done here is locking the @vm. Then,
> >> the corresponding libvirt_lxc process is killed and monitor is closed
> >> via calling virLXCMonitorClose(). This callee tries to lock @mon->client
> >> too. So the order is reversed to the first case. This situation results
> >> in deadlock and unresponsive libvirtd (since the eventloop is involved).
> >>
> >> The proper solution is to unlock the @vm in virLXCMonitorClose prior
> >> entering virNetClientClose(). See the backtrace as follows:
> >
> > Hmm, I think I'd say that the flaw is in the way virLXCProcessMonitorInitNotify
> > is invoked. In the QEMU driver monitor, we unlock the monitor before invoking
> > any callbacks. In the LXC driver monitor we're invoking the callbacks with
> > the monitor lock held. I think we need to make the LXC monitor locking wrt
> > callbacks do what QEMU does, and unlock the monitor. See QEMU_MONITOR_CALLBACK
> > in qemu_monitor.c
> >
> >
> > Daniel
> >
>
> I don't think so. It's not the monitor lock what is causing deadlock here. In fact, the monitor is unlocked:
Oh, I was mixing the monitor vs virnetclient locks up.
ACK to your original patch.
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list