From: Markus Armbruster <armbru@redhat.com>
To: Luiz Capitulino <lcapitulino@redhat.com>
Cc: kwolf@redhat.com, aliguori@us.ibm.com, qemu-devel@nongnu.org,
mdroth@linux.vnet.ibm.com, pbonzini@redhat.com,
eblake@redhat.com
Subject: Re: [Qemu-devel] [PATCH 26/34] error, qerror: add ErrorClass argument to error functions
Date: Thu, 02 Aug 2012 18:57:03 +0200 [thread overview]
Message-ID: <87boitteow.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <1343869374-23417-27-git-send-email-lcapitulino@redhat.com> (Luiz Capitulino's message of "Wed, 1 Aug 2012 22:02:46 -0300")
Luiz Capitulino <lcapitulino@redhat.com> writes:
> The new argument is added to functions qerror_report() and error_set().
> It's stored in Error and QError. qerror_report_err() is also updated to
> take care of it.
>
> The QERR_ macros are changed to contain a place holder value for the
> new argument, so that the value is used on all current calls to
> qerror_report() and error_set() (and also to initialize qerror_table[]).
>
> Next commit will update the QERR_ macros with a proper ErrorClass
> value.
>
> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> ---
> error.c | 6 ++-
> error.h | 3 +-
> qerror.c | 10 +++--
> qerror.h | 145 ++++++++++++++++++++++++++++++++-------------------------------
> 4 files changed, 88 insertions(+), 76 deletions(-)
>
> diff --git a/error.c b/error.c
> index 216cb08..6c8f7b8 100644
> --- a/error.c
> +++ b/error.c
> @@ -14,6 +14,7 @@
> #include "error.h"
> #include "qjson.h"
> #include "qdict.h"
> +#include "qapi-types.h"
> #include "error_int.h"
> #include "qerror.h"
>
> @@ -21,9 +22,10 @@ struct Error
> {
> QDict *obj;
> char *msg;
> + ErrorClass err_class;
> };
>
> -void error_set(Error **errp, const char *fmt, ...)
> +void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
> {
> Error *err;
> va_list ap;
> @@ -39,6 +41,7 @@ void error_set(Error **errp, const char *fmt, ...)
> err->obj = qobject_to_qdict(qobject_from_jsonv(fmt, &ap));
> va_end(ap);
> err->msg = qerror_format(fmt, err->obj);
> + err->err_class = err_class;
>
> *errp = err;
> }
> @@ -49,6 +52,7 @@ Error *error_copy(const Error *err)
>
> err_new = g_malloc0(sizeof(*err));
> err_new->msg = g_strdup(err->msg);
> + err_new->err_class = err->err_class;
> err_new->obj = err->obj;
> QINCREF(err_new->obj);
>
> diff --git a/error.h b/error.h
> index 3d038a5..905613a 100644
> --- a/error.h
> +++ b/error.h
> @@ -13,6 +13,7 @@
> #define ERROR_H
>
> #include "compiler.h"
> +#include "qapi-types.h"
> #include <stdbool.h>
>
> /**
> @@ -26,7 +27,7 @@ typedef struct Error Error;
> * Currently, qerror.h defines these error formats. This function is not
> * meant to be used outside of QEMU.
> */
> -void error_set(Error **err, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
> +void error_set(Error **err, ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(3, 4);
>
> /**
> * Returns true if an indirect pointer to an error is pointing to a valid
> diff --git a/qerror.c b/qerror.c
> index 664efb3..19a1902 100644
> --- a/qerror.c
> +++ b/qerror.c
> @@ -386,13 +386,15 @@ static QDict *error_obj_from_fmt_no_fail(const char *fmt, va_list *va)
> *
> * Return strong reference.
> */
> -static QError *qerror_from_info(const char *fmt, va_list *va)
> +static QError *qerror_from_info(ErrorClass err_class, const char *fmt,
> + va_list *va)
> {
> QError *qerr;
>
> qerr = qerror_new();
> loc_save(&qerr->loc);
>
> + qerr->err_class = err_class;
> qerr->error = error_obj_from_fmt_no_fail(fmt, va);
> qerr->err_msg = qerror_format(fmt, qerr->error);
>
> @@ -518,13 +520,13 @@ static void qerror_print(QError *qerror)
> QDECREF(qstring);
> }
>
> -void qerror_report(const char *fmt, ...)
> +void qerror_report(ErrorClass eclass, const char *fmt, ...)
> {
> va_list va;
> QError *qerror;
>
> va_start(va, fmt);
> - qerror = qerror_from_info(fmt, &va);
> + qerror = qerror_from_info(eclass, fmt, &va);
> va_end(va);
>
> if (monitor_cur_is_qmp()) {
> @@ -540,6 +542,7 @@ struct Error
/* Evil... */
struct Error
> {
> QDict *obj;
> char *msg;
> + ErrorClass err_class;
> };
Evil indeed.
>
> void qerror_report_err(Error *err)
> @@ -551,6 +554,7 @@ void qerror_report_err(Error *err)
> QINCREF(err->obj);
> qerr->error = err->obj;
> qerr->err_msg = g_strdup(err->msg);
> + qerr->err_class = err->err_class;
>
> if (monitor_cur_is_qmp()) {
> monitor_set_error(cur_mon, qerr);
> diff --git a/qerror.h b/qerror.h
> index 2e6a49d..bcc93f8 100644
> --- a/qerror.h
> +++ b/qerror.h
> @@ -16,9 +16,11 @@
> #include "qstring.h"
> #include "qemu-error.h"
> #include "error.h"
> +#include "qapi-types.h"
> #include <stdarg.h>
>
> typedef struct QErrorStringTable {
> + ErrorClass err_class;
> const char *error_fmt;
> const char *desc;
> } QErrorStringTable;
> @@ -28,10 +30,11 @@ typedef struct QError {
> QDict *error;
> Location loc;
> char *err_msg;
> + ErrorClass err_class;
> } QError;
>
> QString *qerror_human(const QError *qerror);
> -void qerror_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> +void qerror_report(ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
> void qerror_report_err(Error *err);
> void assert_no_error(Error *err);
> char *qerror_format(const char *fmt, QDict *error);
> @@ -42,214 +45,214 @@ char *qerror_format(const char *fmt, QDict *error);
> * Use scripts/check-qerror.sh to check.
> */
> #define QERR_ADD_CLIENT_FAILED \
> - "{ 'class': 'AddClientFailed', 'data': {} }"
> + -1, "{ 'class': 'AddClientFailed', 'data': {} }"
The QERR_ macros now expand into two arguments, which isn't nice. But
it avoids a lot of churn.
I hope further clean up of the error reporting can get rid of the
macros.
[...]
next prev parent reply other threads:[~2012-08-02 16:57 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-02 1:02 [Qemu-devel] [PATCH v1 00/34]: add new error format Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 01/34] monitor: drop unused monitor debug code Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 02/34] qerror: QERR_AMBIGUOUS_PATH: drop %(object) from human msg Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 03/34] qerror: QERR_DEVICE_ENCRYPTED: add filename info to " Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 04/34] qerror: reduce public exposure Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 05/34] qerror: drop qerror_abort() Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 06/34] qerror: avoid passing qerr pointer Luiz Capitulino
2012-08-02 11:23 ` Markus Armbruster
2012-08-02 13:44 ` Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 07/34] qerror: QError: drop file, linenr, func Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 08/34] qerror: qerror_format(): return an allocated string Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 09/34] qerror: don't delay error message construction Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 10/34] error: " Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 11/34] qmp: query-block: add 'valid_encryption_key' field Luiz Capitulino
2012-08-02 11:35 ` Markus Armbruster
2012-08-02 13:54 ` Luiz Capitulino
2012-08-10 7:56 ` Markus Armbruster
2012-08-10 13:33 ` Luiz Capitulino
2012-08-10 16:35 ` Markus Armbruster
2012-08-10 17:00 ` Luiz Capitulino
2012-08-10 17:17 ` Markus Armbruster
2012-08-10 17:50 ` Luiz Capitulino
2012-08-11 7:45 ` Markus Armbruster
2012-08-13 13:35 ` Luiz Capitulino
2012-08-13 13:50 ` Markus Armbruster
2012-08-13 14:02 ` Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 12/34] hmp: hmp_cont(): don't rely on QERR_DEVICE_ENCRYPTED Luiz Capitulino
2012-08-02 11:53 ` Markus Armbruster
2012-08-02 14:22 ` Luiz Capitulino
2012-08-10 8:42 ` Markus Armbruster
2012-08-10 14:22 ` Luiz Capitulino
2012-08-10 16:37 ` Markus Armbruster
2012-08-02 1:02 ` [Qemu-devel] [PATCH 13/34] hmp: hmp_change(): " Luiz Capitulino
2012-08-02 13:27 ` Markus Armbruster
2012-08-02 13:46 ` Paolo Bonzini
2012-08-02 13:53 ` Markus Armbruster
2012-08-02 13:57 ` Paolo Bonzini
2012-08-02 14:53 ` Luiz Capitulino
2012-08-02 14:51 ` Luiz Capitulino
2012-08-02 14:42 ` Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 14/34] net: inet_connect(), inet_connect_opts(): add in_progress argument Luiz Capitulino
2012-08-02 15:12 ` Markus Armbruster
2012-08-02 1:02 ` [Qemu-devel] [PATCH 15/34] net: inet_connect(), inet_connect_opts(): return -errno Luiz Capitulino
2012-08-02 13:41 ` Luiz Capitulino
2012-08-02 15:50 ` Markus Armbruster
2012-08-02 16:49 ` Luiz Capitulino
2012-08-06 6:52 ` Amos Kong
2012-08-06 19:59 ` Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 16/34] migration: don't rely on QERR_SOCKET_* Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 17/34] qerror: drop QERR_SOCKET_CONNECT_IN_PROGRESS Luiz Capitulino
2012-08-02 15:58 ` Markus Armbruster
2012-08-06 7:04 ` Amos Kong
2012-08-02 16:54 ` Michael Roth
2012-08-02 17:08 ` Luiz Capitulino
2012-08-03 18:26 ` Michael Roth
2012-08-03 20:31 ` Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 18/34] error: drop unused functions Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 19/34] block: block_int: include qerror.h Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 20/34] hmp: hmp.h: include qdict.h Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 21/34] qapi: qapi-types.h: don't include qapi/qapi-types-core.h Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 22/34] qapi: generate correct enum names for camel case enums Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 23/34] qapi: don't convert enum strings to lowercase Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 24/34] qapi-schema: add ErrorClass enum Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 25/34] qerror: qerror_table: don't use C99 struct initializers Luiz Capitulino
2012-08-02 16:48 ` Markus Armbruster
2012-08-02 1:02 ` [Qemu-devel] [PATCH 26/34] error, qerror: add ErrorClass argument to error functions Luiz Capitulino
2012-08-02 16:57 ` Markus Armbruster [this message]
2012-08-02 1:02 ` [Qemu-devel] [PATCH 27/34] qerror: add proper ErrorClass value for QERR_ macros Luiz Capitulino
2012-08-02 17:01 ` Markus Armbruster
2012-08-02 1:02 ` [Qemu-devel] [PATCH 28/34] error: add error_get_class() Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 29/34] qmp: switch to the new error format on the wire Luiz Capitulino
2012-08-02 17:12 ` Markus Armbruster
2012-08-02 17:19 ` Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 30/34] qemu-ga: " Luiz Capitulino
2012-08-03 17:44 ` Michael Roth
2012-08-03 17:56 ` Eric Blake
2012-08-03 18:02 ` Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 31/34] error, qerror: pass desc string to error calls Luiz Capitulino
2012-08-02 17:19 ` Markus Armbruster
2012-08-02 1:02 ` [Qemu-devel] [PATCH 32/34] qerror: drop qerror_table and qerror_format() Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 33/34] error: drop error_get_qobject()/error_set_qobject() Luiz Capitulino
2012-08-02 17:20 ` Markus Armbruster
2012-08-02 1:02 ` [Qemu-devel] [PATCH 34/34] error, qerror: drop QDict member Luiz Capitulino
2012-08-02 13:41 ` [Qemu-devel] [PATCH v1 00/34]: add new error format Luiz Capitulino
2012-08-02 17:22 ` Markus Armbruster
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=87boitteow.fsf@blackfin.pond.sub.org \
--to=armbru@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=eblake@redhat.com \
--cc=kwolf@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=pbonzini@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 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.