qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 25/25] libqtest: Improve error reporting for bad read from QEMU
Date: Thu, 16 Aug 2018 10:37:01 +0200	[thread overview]
Message-ID: <20180816083701.3932-26-armbru@redhat.com> (raw)
In-Reply-To: <20180816083701.3932-1-armbru@redhat.com>

When read() from the qtest socket or the QMP socket fails or EOFs, we
report "Broken pipe" and exit(1).  This commonly happens when QEMU
crashes.  It also happens when QEMU refuses to run because the test
passed it bad arguments.  Sadly, we neglect to report either.

Improve this by calling abort() instead of exit(1), so kill_qemu()
runs, and reports how QEMU died.  This improves error reporting to
something like

    /x86_64/device/introspect/list: Broken pipe
    tests/libqtest.c:129: kill_qemu() detected QEMU death from signal 6 (Aborted) (dumped core)

Three exit() remain in libqtest.c:

* In qmp_response(), when we can't parse a QMP reply read from the QMP
  socket.  Change to abort() for consistency.

* In qtest_qemu_binary(), when QTEST_QEMU_BINARY isn't in the
  environment.  This can only happen before we start QEMU.  Leave
  alone.

* In qtest_init_without_qmp_handshake(), when the fork()ed child fails
  to execlp().  Leave alone.

exit() elsewhere are unlikely due to QEMU dying on us.  If that should
turn out to be wrong, we can move kill_qemu() from @abrt_hooks to
atexit() or something.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20180815141945.10457-2-armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
[Commit message tweaked slightly]
---
 tests/libqtest.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/tests/libqtest.c b/tests/libqtest.c
index b703fca26d..852ccff1ce 100644
--- a/tests/libqtest.c
+++ b/tests/libqtest.c
@@ -367,7 +367,7 @@ static GString *qtest_recv_line(QTestState *s)
 
         if (len == -1 || len == 0) {
             fprintf(stderr, "Broken pipe\n");
-            exit(1);
+            abort();
         }
 
         g_string_append_len(s->rx, buffer, len);
@@ -454,7 +454,7 @@ static void qmp_response(JSONMessageParser *parser, GQueue *tokens)
     obj = json_parser_parse(tokens, NULL);
     if (!obj) {
         fprintf(stderr, "QMP JSON response parsing failed\n");
-        exit(1);
+        abort();
     }
 
     g_assert(!qmp->response);
@@ -480,7 +480,7 @@ QDict *qmp_fd_receive(int fd)
 
         if (len == -1 || len == 0) {
             fprintf(stderr, "Broken pipe\n");
-            exit(1);
+            abort();
         }
 
         if (log) {
-- 
2.17.1

  parent reply	other threads:[~2018-08-16  8:37 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-16  8:36 [Qemu-devel] [PULL 00/25] Testing patches for 2018-08-16 Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 01/25] libqtest: Rename functions to send QMP messages Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 02/25] libqtest: Clean up how we read device_del messages Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 03/25] libqtest: Clean up how we read the QMP greeting Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 04/25] libqtest: Remove qtest_qmp_discard_response() & friends Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 05/25] libqtest: Document calling conventions Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 06/25] qobject: Replace qobject_from_jsonf() by qobject_from_jsonf_nofail() Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 07/25] qobject: New qobject_from_vjsonf_nofail(), qdict_from_vjsonf_nofail() Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 08/25] libqtest: Simplify qmp_fd_vsend() a bit Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 09/25] test-qobject-input-visitor: Avoid format string ambiguity Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 10/25] qobject: qobject_from_jsonv() is dangerous, hide it away Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 11/25] tests: Pass literal format strings directly to qmp_FOO() Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 12/25] tests: Clean up string interpolation into QMP input (simple cases) Markus Armbruster
2018-08-24 22:41   ` Eric Blake
2018-08-27  4:15     ` Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 13/25] cpu-plug-test: Don't pass integers as strings to device_add Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 14/25] tests: Clean up string interpolation around qtest_qmp_device_add() Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 15/25] migration-test: Make wait_command() return the "return" member Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 16/25] tests: New helper qtest_qmp_receive_success() Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 17/25] migration-test: Make wait_command() cope with '%' Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 18/25] migration-test: Clean up string interpolation into QMP, part 1 Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 19/25] migration-test: Clean up string interpolation into QMP, part 2 Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 20/25] migration-test: Clean up string interpolation into QMP, part 3 Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 21/25] libqtest: Enable compile-time format string checking Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 22/25] libqtest: Replace qtest_startf() by qtest_initf() Markus Armbruster
2018-08-16  8:36 ` [Qemu-devel] [PULL 23/25] libqtest: Rename qtest_FOOv() to qtest_vFOO() for consistency Markus Armbruster
2018-08-16  8:37 ` [Qemu-devel] [PULL 24/25] tests/libqtest: Improve kill_qemu() Markus Armbruster
2018-08-16  8:37 ` Markus Armbruster [this message]
2018-08-16  9:49 ` [Qemu-devel] [PULL 00/25] Testing patches for 2018-08-16 Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180816083701.3932-26-armbru@redhat.com \
    --to=armbru@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).