[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] monitor: flush messages on abort
|
From: |
Steve Sistare |
|
Subject: |
[PATCH] monitor: flush messages on abort |
|
Date: |
Fri, 3 Nov 2023 09:01:29 -0700 |
Buffered monitor output is lost when abort() is called. The pattern
error_report() followed by abort() occurs about 60 times, so valuable
information is being lost when the abort is called in the context of a
monitor command.
To fix, install a SIGABRT handler to flush the monitor buffer to stderr.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
---
monitor/monitor.c | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/monitor/monitor.c b/monitor/monitor.c
index dc352f9..65dace0 100644
--- a/monitor/monitor.c
+++ b/monitor/monitor.c
@@ -701,6 +701,43 @@ void monitor_cleanup(void)
}
}
+#ifdef CONFIG_LINUX
+
+static void monitor_abort(int signal, siginfo_t *info, void *c)
+{
+ Monitor *mon = monitor_cur();
+
+ if (!mon || qemu_mutex_trylock(&mon->mon_lock)) {
+ return;
+ }
+
+ if (mon->outbuf && mon->outbuf->len) {
+ fputs("SIGABRT received: ", stderr);
+ fputs(mon->outbuf->str, stderr);
+ if (mon->outbuf->str[mon->outbuf->len - 1] != '\n') {
+ fputc('\n', stderr);
+ }
+ }
+
+ qemu_mutex_unlock(&mon->mon_lock);
+}
+
+static void monitor_add_abort_handler(void)
+{
+ struct sigaction act;
+
+ memset(&act, 0, sizeof(act));
+ act.sa_sigaction = monitor_abort;
+ act.sa_flags = SA_SIGINFO;
+ sigaction(SIGABRT, &act, NULL);
+}
+
+#else
+
+static void monitor_add_abort_handler(void) {}
+
+#endif
+
static void monitor_qapi_event_init(void)
{
monitor_qapi_event_state = g_hash_table_new(qapi_event_throttle_hash,
@@ -712,6 +749,7 @@ void monitor_init_globals(void)
monitor_qapi_event_init();
qemu_mutex_init(&monitor_lock);
coroutine_mon = g_hash_table_new(NULL, NULL);
+ monitor_add_abort_handler();
/*
* The dispatcher BH must run in the main loop thread, since we
--
1.8.3.1
- [PATCH] monitor: flush messages on abort,
Steve Sistare <=
- Re: [PATCH] monitor: flush messages on abort, Daniel P . Berrangé, 2023/11/03
- Re: [PATCH] monitor: flush messages on abort, Steven Sistare, 2023/11/03
- Re: [PATCH] monitor: flush messages on abort, Steven Sistare, 2023/11/03
- Re: [PATCH] monitor: flush messages on abort, Daniel P . Berrangé, 2023/11/06
- Re: [PATCH] monitor: flush messages on abort, Markus Armbruster, 2023/11/15
- Re: [PATCH] monitor: flush messages on abort, Steven Sistare, 2023/11/15
- Re: [PATCH] monitor: flush messages on abort, Markus Armbruster, 2023/11/15
- Re: [PATCH] monitor: flush messages on abort, Steven Sistare, 2023/11/15
- Re: [PATCH] monitor: flush messages on abort, Markus Armbruster, 2023/11/16
- Re: [PATCH] monitor: flush messages on abort, Steven Sistare, 2023/11/16