While it may be convenient to accept NULL value in qobject_unref() (for similar reasons as free() accepts NULL), it is not such a good idea for qobject_ref(), assert() on NULL. One place relied on that behaviour (the monitor request id), and it's best to be explicit that NULL is accepted there.
Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- include/qapi/qmp/qobject.h | 7 ++++--- monitor.c | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/qapi/qmp/qobject.h b/include/qapi/qmp/qobject.h index befc945504..a0b2affb2c 100644 --- a/include/qapi/qmp/qobject.h +++ b/include/qapi/qmp/qobject.h @@ -73,9 +73,8 @@ static inline void qobject_init(QObject *obj, QType type) static inline void *qobject_ref_impl(QObject *obj) { - if (obj) { - obj->base.refcnt++; - } + assert(obj); + obj->base.refcnt++; return obj; } @@ -103,6 +102,7 @@ static inline void qobject_unref_impl(QObject *obj) /** * qobject_ref(): Increment QObject's reference count + * @obj: a #QObject or child type instance (must not be NULL) * * Returns: the same @obj. The type of @obj will be propagated to the * return type. @@ -112,6 +112,7 @@ static inline void qobject_unref_impl(QObject *obj) /** * qobject_unref(): Decrement QObject's reference count, deallocate * when it reaches zero + * @obj: a #QObject or children type instance (can be NULL) */ #define qobject_unref(obj) qobject_unref_impl(QOBJECT(obj)) diff --git a/monitor.c b/monitor.c index 7dbc1f74b8..3a750208fd 100644 --- a/monitor.c +++ b/monitor.c @@ -4188,7 +4188,7 @@ static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens) req_obj = g_new0(QMPRequest, 1); req_obj->mon = mon; - req_obj->id = qobject_ref(id); + req_obj->id = id ? qobject_ref(id) : NULL; req_obj->req = req; req_obj->need_resume = false; -- 2.17.0.rc1.36.gcedb63ea2f