[libvirt] [PATCH v2] Make LXC container startup/shutdown/I/O more robust

Jiri Denemark jdenemar at redhat.com
Thu Mar 10 15:25:15 UTC 2011


On Thu, Mar 10, 2011 at 13:46:13 +0000, Daniel P. Berrange wrote:
> On Wed, Mar 09, 2011 at 05:02:24PM +0100, Jiri Denemark wrote:
> > > @@ -447,7 +459,13 @@ static int lxcControllerMain(int monitor,
> > >                          ++numActive;
> > >                      }
> > >                  } else if (epollEvent.events & EPOLLHUP) {
> > > -                    VIR_DEBUG("EPOLLHUP from fd %d", epollEvent.data.fd);
> > > +                    if (lxcPidGone(container))
> > > +                        goto cleanup;
> > > +                    curFdOff = epollEvent.data.fd == appPty ? 0 : 1;
> > > +                    if (fdArray[curFdOff].active) {
> > > +                        fdArray[curFdOff].active = 0;
> > > +                        --numActive;
> > > +                    }
> > >                      continue;
> > 
> > Heh, thanks for the opportunity to learn about epoll. This might be a trivial
> > question but... what if we get EPOLLIN event immediately followed by EPOLLHUP
> > on the same fd? Do we end up leaving the data unread until another EPOLLIN
> > arrives? Although it shouldn't be a big deal since we will just read the data
> > from init after the console gets reopened by mingetty.
> 
> The previous branch in this 'if' will have handled the EPOLLIN event
> so we shouldn't delay data.

Ah, right, I misread the long if statement and somehow thought we are first
reading out all the event and only when there are none are we actually copying
data over.

Jirka




More information about the libvir-list mailing list