From patchwork Wed Feb 24 17:55:22 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Markus Armbruster X-Patchwork-Id: 46200 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 9854CB7C98 for ; Thu, 25 Feb 2010 06:30:03 +1100 (EST) Received: from localhost ([127.0.0.1]:39843 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NkMvh-0007IV-R2 for incoming@patchwork.ozlabs.org; Wed, 24 Feb 2010 14:29:53 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NkLls-0005oE-PA for qemu-devel@nongnu.org; Wed, 24 Feb 2010 13:15:40 -0500 Received: from [199.232.76.173] (port=53654 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NkLls-0005nx-7H for qemu-devel@nongnu.org; Wed, 24 Feb 2010 13:15:40 -0500 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1NkLlo-0002MB-A8 for qemu-devel@nongnu.org; Wed, 24 Feb 2010 13:15:40 -0500 Received: from oxygen.pond.sub.org ([213.239.205.148]:56657) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1NkLln-0002La-Ir for qemu-devel@nongnu.org; Wed, 24 Feb 2010 13:15:36 -0500 Received: from blackfin.pond.sub.org (pD9E38C12.dip.t-dialin.net [217.227.140.18]) by oxygen.pond.sub.org (Postfix) with ESMTPA id D96782E2ABD for ; Wed, 24 Feb 2010 18:56:02 +0100 (CET) Received: by blackfin.pond.sub.org (Postfix, from userid 500) id 39CDDE8; Wed, 24 Feb 2010 18:56:01 +0100 (CET) From: Markus Armbruster To: qemu-devel@nongnu.org Date: Wed, 24 Feb 2010 18:55:22 +0100 Message-Id: <1267034160-3517-11-git-send-email-armbru@redhat.com> X-Mailer: git-send-email 1.6.6 In-Reply-To: <1267034160-3517-1-git-send-email-armbru@redhat.com> References: <1267034160-3517-1-git-send-email-armbru@redhat.com> X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 3) Subject: [Qemu-devel] [PATCH RFC 10/48] error: Simplify error sink setup X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org qemu_error_sink can either point to a monitor or a file. In practice, it always points to the current monitor if we have one, else to stderr. Simply route errors to the current monitor or else to stderr, and remove qemu_error_sink along with the functions to control it. Actually, the old code switches the sink slightly later, in handle_user_command() and handle_qmp_command(), than it gets switched now, implicitly, by setting the current monitor in monitor_read() and monitor_control_read(). Likewise, it switches back slightly earlier (same places). Doesn't make a difference, because there are no calls of qemu_error() in between. Signed-off-by: Markus Armbruster --- monitor.c | 6 ---- qemu-error.c | 76 +++++++--------------------------------------------------- sysemu.h | 3 -- vl.c | 1 - 4 files changed, 9 insertions(+), 77 deletions(-) diff --git a/monitor.c b/monitor.c index 4e94cf3..a4263af 100644 --- a/monitor.c +++ b/monitor.c @@ -3970,8 +3970,6 @@ static void handle_user_command(Monitor *mon, const char *cmdline) if (!cmd) goto out; - qemu_errors_to_mon(mon); - if (monitor_handler_is_async(cmd)) { user_async_cmd_handler(mon, cmd, qdict); } else if (monitor_handler_ported(cmd)) { @@ -3983,8 +3981,6 @@ static void handle_user_command(Monitor *mon, const char *cmdline) if (monitor_has_error(mon)) monitor_print_error(mon); - qemu_errors_to_previous(); - out: QDECREF(qdict); } @@ -4386,7 +4382,6 @@ static void handle_qmp_command(JSONMessageParser *parser, QList *tokens) const char *cmd_name, *info_item; args = NULL; - qemu_errors_to_mon(mon); obj = json_parser_parse(tokens, NULL); if (!obj) { @@ -4467,7 +4462,6 @@ err_out: monitor_protocol_emitter(mon, NULL); out: QDECREF(args); - qemu_errors_to_previous(); } /** diff --git a/qemu-error.c b/qemu-error.c index df381f6..63bcdcf 100644 --- a/qemu-error.c +++ b/qemu-error.c @@ -2,70 +2,17 @@ #include "monitor.h" #include "sysemu.h" -typedef struct QemuErrorSink QemuErrorSink; -struct QemuErrorSink { - enum { - ERR_SINK_FILE, - ERR_SINK_MONITOR, - } dest; - union { - FILE *fp; - Monitor *mon; - }; - QemuErrorSink *previous; -}; - -static QemuErrorSink *qemu_error_sink; - -void qemu_errors_to_file(FILE *fp) -{ - QemuErrorSink *sink; - - sink = qemu_mallocz(sizeof(*sink)); - sink->dest = ERR_SINK_FILE; - sink->fp = fp; - sink->previous = qemu_error_sink; - qemu_error_sink = sink; -} - -void qemu_errors_to_mon(Monitor *mon) -{ - QemuErrorSink *sink; - - sink = qemu_mallocz(sizeof(*sink)); - sink->dest = ERR_SINK_MONITOR; - sink->mon = mon; - sink->previous = qemu_error_sink; - qemu_error_sink = sink; -} - -void qemu_errors_to_previous(void) -{ - QemuErrorSink *sink; - - assert(qemu_error_sink != NULL); - sink = qemu_error_sink; - qemu_error_sink = sink->previous; - qemu_free(sink); -} - void qemu_error(const char *fmt, ...) { va_list args; - assert(qemu_error_sink != NULL); - switch (qemu_error_sink->dest) { - case ERR_SINK_FILE: - va_start(args, fmt); - vfprintf(qemu_error_sink->fp, fmt, args); - va_end(args); - break; - case ERR_SINK_MONITOR: - va_start(args, fmt); - monitor_vprintf(qemu_error_sink->mon, fmt, args); - va_end(args); - break; + va_start(args, fmt); + if (cur_mon) { + monitor_vprintf(cur_mon, fmt, args); + } else { + vfprintf(stderr, fmt, args); } + va_end(args); } void qemu_error_internal(const char *file, int linenr, const char *func, @@ -74,19 +21,14 @@ void qemu_error_internal(const char *file, int linenr, const char *func, va_list va; QError *qerror; - assert(qemu_error_sink != NULL); - va_start(va, fmt); qerror = qerror_from_info(file, linenr, func, fmt, &va); va_end(va); - switch (qemu_error_sink->dest) { - case ERR_SINK_FILE: + if (cur_mon) { + monitor_set_error(cur_mon, qerror); + } else { qerror_print(qerror); QDECREF(qerror); - break; - case ERR_SINK_MONITOR: - monitor_set_error(qemu_error_sink->mon, qerror); - break; } } diff --git a/sysemu.h b/sysemu.h index 4d8b7a2..cd84ee8 100644 --- a/sysemu.h +++ b/sysemu.h @@ -69,9 +69,6 @@ int qemu_savevm_state_complete(Monitor *mon, QEMUFile *f); void qemu_savevm_state_cancel(Monitor *mon, QEMUFile *f); int qemu_loadvm_state(QEMUFile *f); -void qemu_errors_to_file(FILE *fp); -void qemu_errors_to_mon(Monitor *mon); -void qemu_errors_to_previous(void); void qemu_error(const char *fmt, ...) __attribute__ ((format(printf, 1, 2))); void qemu_error_internal(const char *file, int linenr, const char *func, const char *fmt, ...) diff --git a/vl.c b/vl.c index 8a588c7..c4c8c1f 100644 --- a/vl.c +++ b/vl.c @@ -4824,7 +4824,6 @@ int main(int argc, char **argv, char **envp) init_clocks(); - qemu_errors_to_file(stderr); qemu_cache_utils_init(envp); QLIST_INIT (&vm_change_state_head);