On Wed, Jun 03, 2009 at 12:00:05PM +0100, Daniel P. Berrange wrote:
On Mon, Jun 01, 2009 at 10:26:38AM +0000, Frederik Himpe wrote:
> On Mon, 01 Jun 2009 10:36:36 +0100, Daniel P. Berrange wrote:
>
> > On Sat, May 30, 2009 at 12:45:21PM +0000, Frederik Himpe wrote:
> >> On Fri, 29 May 2009 19:18:05 +0200, Daniel Veillard wrote:
> >>
> >> > - test case for exercising the event loop (Daniel Berrange)
> >>
> >> I think this test is failing for me on Mandriva Cooker (both i586 and
> >> x86_64):
>
> >> What could be wrong?
> >
> > Strange, this test case works fine for me on both archs with Fedora
> > 9/10/11 and RHEL 5.
> >
> > Could you run the test manually with debugging turned on, eg
> >
> > LIBVIRT_DEBUG=1 ./eventtest
> >
> > And also try and capture an strace log with timings
> >
> > strace -ttt ./eventtest
>
> Actually I found out the test failure is not 100% reproducible. I have
> seen it failing in steps 6, 9 and IIRC also step 10 of eventtest.
What I think is happening is that poll() is returning much sooner than
we anticipate. When you give it a timeout, it'll return upto 1 timeslice
before the timeout is due. I suspect that this is what is tripping up
the test case on Mandriva. Could you apply the following patch, and
re-build & run LIBVIRT_DEBUG=1 ./eventtest again, and also re-run with
the 'strace -ttt -f ./eventtest' (i forgot to ask for -f last time).
The patch in question being this one :-)
Index: qemud/event.c
===================================================================
RCS file: /data/cvs/libvirt/qemud/event.c,v
retrieving revision 1.23
diff -u -p -r1.23 event.c
--- qemud/event.c 12 May 2009 16:43:05 -0000 1.23
+++ qemud/event.c 3 Jun 2009 10:57:04 -0000
@@ -401,7 +401,8 @@ static int virEventDispatchTimeouts(void
for (i = 0 ; i < ntimeouts ; i++) {
if (eventLoop.timeouts[i].deleted || eventLoop.timeouts[i].frequency < 0)
continue;
-
+ VIR_INFO("Check timeout %lld against current %lld",
+ eventLoop.timeouts[i].expiresAt, now);
if (eventLoop.timeouts[i].expiresAt <= now) {
virEventTimeoutCallback cb = eventLoop.timeouts[i].cb;
int timer = eventLoop.timeouts[i].timer;
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|