From: Markus Armbruster <armbru@redhat.com>
To: marcandre.lureau@redhat.com
Cc: qemu-devel@nongnu.org, Michael Roth <michael.roth@amd.com>,
Kevin Wolf <kwolf@redhat.com>,
Laurent Vivier <laurent@vivier.eu>,
Warner Losh <imp@bsdimp.com>, Kyle Evans <kevans@freebsd.org>,
Hanna Reitz <hreitz@redhat.com>,
Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>,
Fam Zheng <fam@euphon.net>, Eric Blake <eblake@redhat.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
qemu-block@nongnu.org
Subject: Re: [PATCH 5/9] error-report: introduce ErrorReportDetailedFunc
Date: Thu, 07 Jul 2022 14:11:33 +0200 [thread overview]
Message-ID: <87mtdldswa.fsf@pond.sub.org> (raw)
In-Reply-To: <20220616124034.3381391-6-marcandre.lureau@redhat.com> (marcandre lureau's message of "Thu, 16 Jun 2022 16:40:30 +0400")
marcandre.lureau@redhat.com writes:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Remove monitor dependency from error printing code, by allowing programs
> to set a callback for when to use "detailed" reporting or not.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> include/qemu/error-report.h | 4 +++-
> bsd-user/main.c | 2 +-
> linux-user/main.c | 2 +-
> qemu-img.c | 2 +-
> qemu-io.c | 2 +-
> qemu-nbd.c | 2 +-
> scsi/qemu-pr-helper.c | 2 +-
> softmmu/vl.c | 7 ++++++-
> storage-daemon/qemu-storage-daemon.c | 7 ++++++-
> util/error-report.c | 8 +++++---
> 10 files changed, 26 insertions(+), 12 deletions(-)
>
> diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h
> index 3ae2357fda54..e2e630f207f0 100644
> --- a/include/qemu/error-report.h
> +++ b/include/qemu/error-report.h
> @@ -13,6 +13,8 @@
> #ifndef QEMU_ERROR_REPORT_H
> #define QEMU_ERROR_REPORT_H
>
> +typedef bool (*ErrorReportDetailedFunc)(void);
> +
> typedef struct Location {
> /* all members are private to qemu-error.c */
> enum { LOC_NONE, LOC_CMDLINE, LOC_FILE } kind;
> @@ -46,7 +48,7 @@ bool error_report_once_cond(bool *printed, const char *fmt, ...)
> bool warn_report_once_cond(bool *printed, const char *fmt, ...)
> G_GNUC_PRINTF(2, 3);
>
> -void error_init(const char *argv0);
> +void error_init(const char *argv0, ErrorReportDetailedFunc detailed_fn);
>
> /*
> * Similar to error_report(), except it prints the message just once.
> diff --git a/bsd-user/main.c b/bsd-user/main.c
> index 6f09180d6541..d5f8fca863d7 100644
> --- a/bsd-user/main.c
> +++ b/bsd-user/main.c
> @@ -292,7 +292,7 @@ int main(int argc, char **argv)
>
> save_proc_pathname(argv[0]);
>
> - error_init(argv[0]);
> + error_init(argv[0], NULL);
> module_call_init(MODULE_INIT_TRACE);
> qemu_init_cpu_list();
> module_call_init(MODULE_INIT_QOM);
[More such calls of error_init()...]
> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index 54e920ada1a1..3b46fc9c1fc5 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
> @@ -2590,6 +2590,11 @@ void qmp_x_exit_preconfig(Error **errp)
> }
> }
>
> +static bool error_is_detailed(void)
> +{
> + return !monitor_cur();
> +}
> +
> void qemu_init(int argc, char **argv, char **envp)
> {
> QemuOpts *opts;
> @@ -2634,7 +2639,7 @@ void qemu_init(int argc, char **argv, char **envp)
> qemu_add_opts(&qemu_action_opts);
> module_call_init(MODULE_INIT_OPTS);
>
> - error_init(argv[0]);
> + error_init(argv[0], error_is_detailed);
> qemu_init_exec_dir(argv[0]);
>
> qemu_init_arch_modules();
> diff --git a/storage-daemon/qemu-storage-daemon.c b/storage-daemon/qemu-storage-daemon.c
> index c104817cdddc..7e4d5030a045 100644
> --- a/storage-daemon/qemu-storage-daemon.c
> +++ b/storage-daemon/qemu-storage-daemon.c
> @@ -368,13 +368,18 @@ static void pid_file_init(void)
> atexit(pid_file_cleanup);
> }
>
> +static bool error_is_detailed(void)
> +{
> + return !monitor_cur();
> +}
> +
> int main(int argc, char *argv[])
> {
> #ifdef CONFIG_POSIX
> signal(SIGPIPE, SIG_IGN);
> #endif
>
> - error_init(argv[0]);
> + error_init(argv[0], error_is_detailed);
> qemu_init_exec_dir(argv[0]);
> os_setup_signal_handling();
>
> diff --git a/util/error-report.c b/util/error-report.c
> index c43227a975e2..c2181f80a83d 100644
> --- a/util/error-report.c
> +++ b/util/error-report.c
> @@ -11,7 +11,6 @@
> */
>
> #include "qemu/osdep.h"
> -#include "monitor/monitor.h"
> #include "qemu/error-report.h"
>
> /*
> @@ -28,6 +27,7 @@ typedef enum {
> bool message_with_timestamp;
> bool error_with_guestname;
> const char *error_guest_name;
> +ErrorReportDetailedFunc detailed_fn = NULL;
>
> int error_printf(const char *fmt, ...)
> {
> @@ -195,7 +195,7 @@ real_time_iso8601(void)
> */
> static void vreport(report_type type, const char *fmt, va_list ap)
> {
> - bool detailed = !monitor_cur();
> + bool detailed = detailed_fn ? detailed_fn() : TRUE;
> gchar *timestr;
>
> if (message_with_timestamp && detailed) {
> @@ -387,7 +387,7 @@ static void qemu_log_func(const gchar *log_domain,
> }
> }
>
> -void error_init(const char *argv0)
> +void error_init(const char *argv0, ErrorReportDetailedFunc detailed)
> {
> const char *p = strrchr(argv0, '/');
>
> @@ -401,4 +401,6 @@ void error_init(const char *argv0)
> g_log_set_default_handler(qemu_log_func, NULL);
> g_warn_if_fail(qemu_glog_domains == NULL);
> qemu_glog_domains = g_strdup(g_getenv("G_MESSAGES_DEBUG"));
> +
> + detailed_fn = detailed;
> }
A callback works, but note that each program's function is fixed. Why
not use the linker to resolve it? Have a .o in libqemuutil.a that
defines error_is_detailed() to return false always. Have another
error_is_detailed() that returns !monitor_cur() in monitor.c. A program
that links the monitor gets the latter, all the others the former.
What do you think?
next prev parent reply other threads:[~2022-07-07 12:14 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-16 12:40 [PATCH 0/9] Preliminary patches for subproject split marcandre.lureau
2022-06-16 12:40 ` [PATCH 1/9] monitor: make error_vprintf_unless_qmp() static marcandre.lureau
2022-07-07 12:23 ` Markus Armbruster
2022-07-07 17:35 ` Marc-André Lureau
2022-07-08 13:56 ` Markus Armbruster
2022-07-08 14:10 ` Marc-André Lureau
2022-06-16 12:40 ` [PATCH 2/9] error-report: misc comment fix marcandre.lureau
2022-06-20 7:22 ` Markus Armbruster
2022-06-16 12:40 ` [PATCH 3/9] error-report: introduce "detailed" variable marcandre.lureau
2022-06-20 7:22 ` Markus Armbruster
2022-06-16 12:40 ` [PATCH 4/9] error-report: simplify print_loc() marcandre.lureau
2022-06-20 7:24 ` Markus Armbruster
2022-06-16 12:40 ` [PATCH 5/9] error-report: introduce ErrorReportDetailedFunc marcandre.lureau
2022-06-16 18:28 ` Warner Losh
2022-07-07 12:11 ` Markus Armbruster [this message]
2022-07-07 18:06 ` Marc-André Lureau
2022-06-16 12:40 ` [PATCH 6/9] error-report: add a callback to overwrite error_vprintf marcandre.lureau
2022-07-07 12:16 ` Markus Armbruster
2022-07-07 18:05 ` Marc-André Lureau
2022-07-12 9:32 ` Marc-André Lureau
2022-06-16 12:40 ` [PATCH 7/9] qapi: move QEMU-specific dispatch code in monitor marcandre.lureau
2022-06-16 12:40 ` [PATCH 8/9] scripts/qapi-gen: add -i option marcandre.lureau
2022-06-21 14:13 ` Markus Armbruster
2022-06-23 8:10 ` Marc-André Lureau
2022-08-02 13:27 ` Markus Armbruster
2022-08-03 7:42 ` Marc-André Lureau
2022-08-03 11:16 ` Markus Armbruster
2022-06-16 12:40 ` [PATCH 9/9] scripts/qapi: add required system includes to visitor marcandre.lureau
2022-06-23 13:43 ` Markus Armbruster
2022-07-04 14:55 ` Marc-André Lureau
2022-06-16 13:12 ` [PATCH 0/9] Preliminary patches for subproject split Paolo Bonzini
2022-06-16 13:20 ` Marc-André Lureau
2022-06-28 8:15 ` Marc-André Lureau
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=87mtdldswa.fsf@pond.sub.org \
--to=armbru@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=fam@euphon.net \
--cc=hreitz@redhat.com \
--cc=imp@bsdimp.com \
--cc=kevans@freebsd.org \
--cc=kwolf@redhat.com \
--cc=laurent@vivier.eu \
--cc=marcandre.lureau@redhat.com \
--cc=michael.roth@amd.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=vsementsov@yandex-team.ru \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.