On Wed, Jan 15, 2014 at 7:55 PM, Markus Armbruster <arm...@redhat.com> wrote: > Luiz Capitulino <lcapitul...@redhat.com> writes: > >> On Tue, 14 Jan 2014 17:44:51 +0100 >> Kevin Wolf <kw...@redhat.com> wrote: >> >>> Am 14.01.2014 um 04:38 hat Edgar E. Iglesias geschrieben: >>> > On Tue, Jan 14, 2014 at 09:27:10AM +1000, Peter Crosthwaite wrote: >>> > > Ping, >>> > > >>> > > Has this one been forgotten or are there issues? PMM had a small >>> > > comment, but he waived it AFAICT. >>> > >>> > Pong, >>> > >>> > I've merged it now, thanks! >>> >>> I believe it's something in this pull requests that breaks make check. >> >> And you're right. But first, let me confirm that we're talking about the >> same breakage. This is what I'm getting: >> >> make tests/check-qom-interface >> libqemuutil.a(qemu-error.o): In function `error_vprintf': >> /home/lcapitulino/work/src/upstream/qmp-unstable/util/qemu-error.c:23: >> undefined reference to `cur_mon' >> /home/lcapitulino/work/src/upstream/qmp-unstable/util/qemu-error.c:24: >> undefined reference to `cur_mon' >> /home/lcapitulino/work/src/upstream/qmp-unstable/util/qemu-error.c:24: >> undefined reference to `monitor_vprintf' >> libqemuutil.a(qemu-error.o): In function `error_printf_unless_qmp': >> /home/lcapitulino/work/src/upstream/qmp-unstable/util/qemu-error.c:47: >> undefined reference to `monitor_cur_is_qmp' >> libqemuutil.a(qemu-error.o): In function `error_print_loc': >> /home/lcapitulino/work/src/upstream/qmp-unstable/util/qemu-error.c:174: >> undefined reference to `cur_mon' >> collect2: error: ld returned 1 exit status >> make: *** [tests/check-qom-interface] Error 1 >> >> I tried bisecting it, but git bisect weren't capable of finding the >> culprit. So debugged it, and the problem was introduced by: >> >> commit 594278718323ca7bffaab0fb7fc6c82fa2c1cd5f >> Author: Peter Crosthwaite <peter.crosthwa...@xilinx.com> >> Date: Wed Jan 1 18:49:52 2014 -0800 >> >> qerror: Remove assert_no_error() >> > > Are you sure you don't mean commit 5d24ee7 "error: Add error_abort"? > >> There isn't nothing really wrong with this commit. The problem seems to >> be that the tests link against libqemuutil.a and this library pulls in >> everything from util/. The commit above changed util/error.c to call >> error_report(), > > Yes, 5d24ee7 does that. > >> which depends on 'cur_mon', which is only made available >> by monitor.o. > > And stubs/mon-set-error.o > >> I don't think we want to mess up with including monitor.o on libqemuutil.a. >> Besides, I now find it a bit weird to call error_report() from an error >> reporting function. So it's better to just call fprintf(stderr,) instead. > > It's not weird at all. Higher layer calls lower layer. > >> Peter, Markus, are you ok with this patch? >> >> PS: I do run make check before sending a pull request, and did run this >> time too. Not sure how I didn't catch this. Thanks for the report >> Kevin! >> >> diff --git a/util/error.c b/util/error.c >> index f11f1d5..7c7650c 100644 >> --- a/util/error.c >> +++ b/util/error.c >> @@ -44,7 +44,7 @@ void error_set(Error **errp, ErrorClass err_class, const >> char *fmt, ...) >> err->err_class = err_class; >> >> if (errp == &error_abort) { >> - error_report("%s", error_get_pretty(err)); >> + fprintf(stderr, "%s", error_get_pretty(err)); >> abort(); >> } >> >> @@ -80,7 +80,7 @@ void error_set_errno(Error **errp, int os_errno, >> ErrorClass err_class, >> err->err_class = err_class; >> >> if (errp == &error_abort) { >> - error_report("%s", error_get_pretty(err)); >> + fprintf(stderr, "%s", error_get_pretty(err)); >> abort(); >> } >> >> @@ -125,7 +125,7 @@ void error_set_win32(Error **errp, int win32_err, >> ErrorClass err_class, >> err->err_class = err_class; >> >> if (errp == &error_abort) { >> - error_report("%s", error_get_pretty(err)); >> + fprintf(stderr, "%s", error_get_pretty(err)); >> abort(); >> } >> >> @@ -171,7 +171,7 @@ void error_free(Error *err) >> void error_propagate(Error **dst_err, Error *local_err) >> { >> if (local_err && dst_err == &error_abort) { >> - error_report("%s", error_get_pretty(local_err)); >> + fprintf(stderr, "%s", error_get_pretty(local_err)); >> abort(); >> } else if (dst_err && !*dst_err) { >> *dst_err = local_err; > > Error message screwed up! > > Before: > > $ qemu -msg timestamp=on -global i440FX-pcihost.foo=bar > 2014-01-15T09:50:18.066725Z upstream-qemu: Property '.foo' not found > Aborted (core dumped) >
curious - should the user be able to cause an abort just on command line misuse like that? My understanding is that assert (and therefore assert_no_error and error_abort) should be limited to fatal errors indicating qemu source bugs. Is it ok to report-and-abort a non recoverable error like this one? If so, theres significant cleanup we can do as many of us have been using the verbose error-report -> exit(1) for situations much like this. > After: > > Property '.foo' not foundAborted (core dumped) > > Note the loss of timestamp, name of executable, location, and the final > newline. Please fix. > > Amazing super-secret trick to get error messages fit for human > consumption: reproduce them before you commit! ;-P > Short series on list that straightens it all out based on your stub recommendations. Regards, Peter