All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Andreas Färber" <afaerber@suse.de>,
	"Daniel P. Berrangé" <berrange@redhat.com>
Subject: [Qemu-devel] [PATCH] qom: avoid reporting errors for NULL error object
Date: Mon, 19 Nov 2018 13:59:03 +0000	[thread overview]
Message-ID: <20181119135903.11729-1-berrange@redhat.com> (raw)

When debugging QEMU it is often useful to put a breakpoint on the
error_setg_internal method impl.

Unfortunately the object_property_add / object_class_property_add
methods call object_property_find / object_class_property_find methods
to check if a property exists already before adding the new property.

As a result there are a huge number of calls to error_setg_internal
on startup of most QEMU commands, making it very painful to set a
breakpoint on this method.

This puts a minor optimization on the code so that we avoid calling
error_setg() when errp is NULL. Functionally there's no difference
since error_setg() is a no-op when errp is NULL, but this lets us
use breakpoints in GDB in a practical way.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 qom/object.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/qom/object.c b/qom/object.c
index 547dcf97c3..ddd5e7a30e 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -1087,7 +1087,12 @@ ObjectProperty *object_property_find(Object *obj, const char *name,
         return prop;
     }
 
-    error_setg(errp, "Property '.%s' not found", name);
+    /* Optimized to avoid calling error_setg if errp == NULL
+     * otherwise every property add call hits error_setg
+     * making it impratical to set breakpoints in GDB */
+    if (errp) {
+        error_setg(errp, "Property '.%s' not found", name);
+    }
     return NULL;
 }
 
@@ -1133,7 +1138,10 @@ ObjectProperty *object_class_property_find(ObjectClass *klass, const char *name,
     }
 
     prop = g_hash_table_lookup(klass->properties, name);
-    if (!prop) {
+    /* Optimized to avoid calling error_setg if errp == NULL
+     * otherwise every property add call hits error_setg
+     * making it impratical to set breakpoints in GDB */
+    if (!prop && errp) {
         error_setg(errp, "Property '.%s' not found", name);
     }
     return prop;
-- 
2.19.1

             reply	other threads:[~2018-11-19 13:59 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-19 13:59 Daniel P. Berrangé [this message]
2018-11-20  5:45 ` [Qemu-devel] [PATCH] qom: avoid reporting errors for NULL error object Marc-André Lureau
2018-11-20  9:45   ` Daniel P. Berrangé
2018-11-20 18:16 ` Markus Armbruster
2018-11-21  9:31   ` Daniel P. Berrangé

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=20181119135903.11729-1-berrange@redhat.com \
    --to=berrange@redhat.com \
    --cc=afaerber@suse.de \
    --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.