15.04.2019 8:51, Markus Armbruster wrote: > Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> writes: > >> It would be nice to have Error object not freed away when debugging a >> coredump. >> >> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> >> --- >> util/error.c | 8 +++++--- >> 1 file changed, 5 insertions(+), 3 deletions(-) >> >> diff --git a/util/error.c b/util/error.c >> index 934a78e1b1..f9180c0f30 100644 >> --- a/util/error.c >> +++ b/util/error.c >> @@ -32,9 +32,11 @@ Error *error_fatal; >> static void error_handle_fatal(Error **errp, Error *err) >> { >> if (errp == &error_abort) { >> - fprintf(stderr, "Unexpected error in %s() at %s:%d:\n", >> - err->func, err->src, err->line); >> - error_report_err(err); >> + error_report("Unexpected error in %s() at %s:%d: %s", >> + err->func, err->src, err->line, error_get_pretty(err)); >> + if (err->hint) { >> + error_printf_unless_qmp("%s", err->hint->str); >> + } >> abort(); >> } >> if (errp == &error_fatal) { > > No objections to not freeing the error object on the path to abort(). > > You also format the error message differently. Commit 1e9b65bb1ba's > example > > Unexpected error in parse_block_error_action() at > .../qemu/blockdev.c:322: > qemu-system-x86_64: -drive if=none,werror=foo: 'foo' invalid write > error action > Aborted (core dumped) > > changes to (guesswork, not tested): > > qemu-system-x86_64: -drive if=none,werror=foo: Unexpected error in > parse_block_error_action() at .../qemu/blockdev.c:322: 'foo' invalid write > error action > Aborted (core dumped)
hm. checkpatch don't allow to put \n into error_report. So, should I call error_report twice? Transition from fprintf to error_report is OK for you? > > Intentional? It makes sense as an error message, but readability > suffers due to the long line. If we decide we want this change, it > needs to be mentioned in the commit message. > > Open-coding error_report_err() here so you can delete the error_free() > and a newline is a bit ugly, but factoring out the common part doesn't > seem worthwhile. > > Hmm, perhaps factoring out > > if (err->hint) { > error_printf_unless_qmp("%s", err->hint->str); > } > > into a static helper would be worthwhile. We already have two copies. > -- Best regards, Vladimir