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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list