qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 3/3] qobject: replace qobject_incref/QINCREF qob


From: Eric Blake
Subject: Re: [Qemu-devel] [PATCH 3/3] qobject: replace qobject_incref/QINCREF qobject_decref/QDECREF
Date: Wed, 21 Mar 2018 10:36:18 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0

On 03/21/2018 09:51 AM, Marc-André Lureau wrote:
On Wed, Mar 21, 2018 at 3:28 PM, Eric Blake <address@hidden> wrote:
On 03/21/2018 08:40 AM, Marc-André Lureau wrote:

Now that we can safely call QOBJECT() on QObject * and children types,
we can have a single macro to ref/unref the object.

Change the incref/decref prefix name for the more common ref/unref.


I know you did this by sed (for the most part); but it would be worth
including the command line you used in the commit message to make it easier
to reproduce the same mechanical portion of the patch when rebasing.

git sed QINCREF qobject_ref
git sed QDECREF qobject_unref
git sed qobject_incref qobject_ref
git sed qobject_decref qobject_ref

Did any of these create longer lines that needed reflowing? (Moot point if we bikeshed the ending macro name to be no longer than QDECREF)

+++ b/scripts/coccinelle/qobject.cocci
@@ -3,11 +3,11 @@
   expression Obj, Key, E;
   @@
   (
-- qobject_incref(QOBJECT(E));
-+ QINCREF(E);
+- qobject_ref(QOBJECT(E));
++ qobject_ref(E);
   |
-- qobject_decref(QOBJECT(E));
-+ QDECREF(E);
+- qobject_unref(QOBJECT(E));
++ qobject_unref(E);


I wonder if these branches should just be removed; they made sense when we
had two spellings, but after your mass conversion, the .cocci script is
unlikely to ever find regressions on this front.

They would still remove extra cast, wouldn't they?

But the point I'm making is that the old code dealing with type-specific names actually happened multiple times (it was easy to overlook the macro definition that served as shorthand for decrementing a derived type, and thus spelling it out in longhand as a decrement on the conversion to the base type - and where because the two spellings were type-dependent the compiler flagged you if you tried to use the wrong spelling for the type at hand); in new code, where a single macro works for both base and derived types, no one is likely to mistakenly cast their derived type to the base type just to call the generic macro (because your naive attempt at just decrementing will work, regardless of the type at hand, so you don't have to throw in casts to shut up the compiler).

At the same time, you're right that keeping the .cocci doesn't hurt (even if it is unlikely to find future offenders).

--
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org



reply via email to

[Prev in Thread] Current Thread [Next in Thread]