continue;
}
- qobject_ref(qdict_entry_value(entry));
- qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
+ qdict_put_obj(d, qdict_entry_key(entry),
+ qobject_ref(qdict_entry_value(entry)));
found_any = true;
}
* suffices without querying the (exact_)filename of this BDS. */
if (bs->file->bs->full_open_options) {
qdict_put_str(opts, "driver", drv->format_name);
- qobject_ref(bs->file->bs->full_open_options);
- qdict_put(opts, "file", bs->file->bs->full_open_options);
+ qdict_put(opts, "file",
+ qobject_ref(bs->file->bs->full_open_options));
bs->full_open_options = opts;
} else {
opts = qdict_new();
qdict_put_str(opts, "driver", "blkdebug");
- qobject_ref(bs->file->bs->full_open_options);
- qdict_put(opts, "image", bs->file->bs->full_open_options);
+ qdict_put(opts, "image", qobject_ref(bs->file->bs->full_open_options));
for (e = qdict_first(options); e; e = qdict_next(options, e)) {
if (strcmp(qdict_entry_key(e), "x-image")) {
- qobject_ref(qdict_entry_value(e));
- qdict_put_obj(opts, qdict_entry_key(e), qdict_entry_value(e));
+ qdict_put_obj(opts, qdict_entry_key(e),
+ qobject_ref(qdict_entry_value(e)));
}
}
QDict *opts = qdict_new();
qdict_put_str(opts, "driver", "blkverify");
- qobject_ref(bs->file->bs->full_open_options);
- qdict_put(opts, "raw", bs->file->bs->full_open_options);
- qobject_ref(s->test_file->bs->full_open_options);
- qdict_put(opts, "test", s->test_file->bs->full_open_options);
+ qdict_put(opts, "raw",
+ qobject_ref(bs->file->bs->full_open_options));
+ qdict_put(opts, "test",
+ qobject_ref(s->test_file->bs->full_open_options));
bs->full_open_options = opts;
}
static void null_refresh_filename(BlockDriverState *bs, QDict *opts)
{
- qobject_ref(opts);
qdict_del(opts, "filename");
if (!qdict_size(opts)) {
}
qdict_put_str(opts, "driver", bs->drv->format_name);
- bs->full_open_options = opts;
+ bs->full_open_options = qobject_ref(opts);
}
static BlockDriver bdrv_null_co = {
static void nvme_refresh_filename(BlockDriverState *bs, QDict *opts)
{
- qobject_ref(opts);
qdict_del(opts, "filename");
if (!qdict_size(opts)) {
}
qdict_put_str(opts, "driver", bs->drv->format_name);
- bs->full_open_options = opts;
+ bs->full_open_options = qobject_ref(opts);
}
static void nvme_refresh_limits(BlockDriverState *bs, Error **errp)
children = qlist_new();
for (i = 0; i < s->num_children; i++) {
- qobject_ref(s->children[i]->bs->full_open_options);
- qlist_append(children, s->children[i]->bs->full_open_options);
+ qlist_append(children,
+ qobject_ref(s->children[i]->bs->full_open_options));
}
opts = qdict_new();
static inline QNull *qnull(void)
{
- qobject_ref(&qnull_);
- return &qnull_;
+ return qobject_ref(&qnull_);
}
bool qnull_is_equal(const QObject *x, const QObject *y);
/**
* qobject_ref(): Increment QObject's reference count
+ *
+ * Returns: the same @obj. The type of @obj will be propagated to the
+ * return type.
*/
-#define qobject_ref(obj) qobject_ref_impl(QOBJECT(obj))
+#define qobject_ref(obj) ({ \
+ typeof(obj) _o = (obj); \
+ qobject_ref_impl(QOBJECT(_o)); \
+ _o; \
+})
/**
* qobject_unref(): Decrement QObject's reference count, deallocate
* caller won't free the data (which will be finally freed in
* responder thread).
*/
- qobject_ref(data);
qemu_mutex_lock(&mon->qmp.qmp_queue_lock);
- g_queue_push_tail(mon->qmp.qmp_responses, data);
+ g_queue_push_tail(mon->qmp.qmp_responses, qobject_ref(data));
qemu_mutex_unlock(&mon->qmp.qmp_queue_lock);
qemu_bh_schedule(mon_global.qmp_respond_bh);
} else {
* replacing a prior stored event if any.
*/
qobject_unref(evstate->qdict);
- evstate->qdict = qdict;
- qobject_ref(evstate->qdict);
+ evstate->qdict = qobject_ref(qdict);
} else {
/*
* Last send was (at least) evconf->rate ns ago.
evstate = g_new(MonitorQAPIEventState, 1);
evstate->event = event;
- evstate->data = data;
- qobject_ref(evstate->data);
+ evstate->data = qobject_ref(data);
evstate->qdict = NULL;
evstate->timer = timer_new_ns(event_clock_type,
monitor_qapi_event_handler,
if (rsp) {
if (id) {
- /* This is for the qdict below. */
- qobject_ref(id);
- qdict_put_obj(qobject_to(QDict, rsp), "id", id);
+ qdict_put_obj(qobject_to(QDict, rsp), "id", qobject_ref(id));
}
monitor_json_emitter(mon, rsp);
goto err;
}
- qobject_ref(id);
- qdict_del(qdict, "id");
-
req_obj = g_new0(QMPRequest, 1);
req_obj->mon = mon;
- req_obj->id = id;
+ req_obj->id = qobject_ref(id);
req_obj->req = req;
req_obj->need_resume = false;
+ qdict_del(qdict, "id");
+
if (qmp_is_oob(qdict)) {
/* Out-Of-Band (OOB) requests are executed directly in parser. */
trace_monitor_qmp_cmd_out_of_band(qobject_get_try_str(req_obj->id)
return;
}
- qobject_ref(qobj);
- *obj = qobj;
+ *obj = qobject_ref(qobj);
}
static void qobject_input_type_null(Visitor *v, const char *name,
v->visitor.optional = qobject_input_optional;
v->visitor.free = qobject_input_free;
- v->root = obj;
- qobject_ref(obj);
+ v->root = qobject_ref(obj);
return v;
}
QObject **obj, Error **errp)
{
QObjectOutputVisitor *qov = to_qov(v);
- qobject_ref(*obj);
- qobject_output_add_obj(qov, name, *obj);
+
+ qobject_output_add_obj(qov, name, qobject_ref(*obj));
}
static void qobject_output_type_null(Visitor *v, const char *name,
assert(qov->root && QSLIST_EMPTY(&qov->stack));
assert(opaque == qov->result);
- qobject_ref(qov->root);
- *qov->result = qov->root;
+ *qov->result = qobject_ref(qov->root);
qov->result = NULL;
}
for (i = 0; i < QDICT_BUCKET_MAX; i++) {
QLIST_FOREACH(entry, &src->table[i], next) {
- qobject_ref(entry->value);
- qdict_put_obj(dest, entry->key, entry->value);
+ qdict_put_obj(dest, entry->key, qobject_ref(entry->value));
}
}
val = qdict_get(src, key);
if (val) {
- qobject_ref(val);
- qdict_put_obj(dst, key, val);
+ qdict_put_obj(dst, key, qobject_ref(val));
}
}
qdict_flatten_qlist(qobject_to(QList, value), target, new_key);
} else {
/* All other types are moved to the target unchanged. */
- qobject_ref(value);
- qdict_put_obj(target, new_key, value);
+ qdict_put_obj(target, new_key, qobject_ref(value));
}
g_free(new_key);
delete = true;
} else if (prefix) {
/* All other objects are moved to the target unchanged. */
- qobject_ref(value);
- qdict_put_obj(target, new_key, value);
+ qdict_put_obj(target, new_key, qobject_ref(value));
delete = true;
}
while (entry != NULL) {
next = qdict_next(src, entry);
if (strstart(entry->key, start, &p)) {
- qobject_ref(entry->value);
- qdict_put_obj(*dst, p, entry->value);
+ qdict_put_obj(*dst, p, qobject_ref(entry->value));
qdict_del(src, entry->key);
}
entry = next;
qdict_put_obj(two_level, prefix, QOBJECT(child_dict));
}
- qobject_ref(ent->value);
- qdict_put_obj(child_dict, suffix, ent->value);
+ qdict_put_obj(child_dict, suffix, qobject_ref(ent->value));
} else {
if (child) {
error_setg(errp, "Key %s prefix is already set as a dict",
prefix);
goto error;
}
- qobject_ref(ent->value);
- qdict_put_obj(two_level, prefix, ent->value);
+ qdict_put_obj(two_level, prefix, qobject_ref(ent->value));
}
g_free(prefix);
qdict_put_obj(multi_level, ent->key, child);
} else {
- qobject_ref(ent->value);
- qdict_put_obj(multi_level, ent->key, ent->value);
+ qdict_put_obj(multi_level, ent->key, qobject_ref(ent->value));
}
}
qobject_unref(two_level);
goto error;
}
- qobject_ref(child);
- qlist_append_obj(qobject_to(QList, dst), child);
+ qlist_append_obj(qobject_to(QList, dst), qobject_ref(child));
}
qobject_unref(multi_level);
multi_level = NULL;
next = qdict_next(src, entry);
if (overwrite || !qdict_haskey(dest, entry->key)) {
- qobject_ref(entry->value);
- qdict_put_obj(dest, entry->key, entry->value);
+ qdict_put_obj(dest, entry->key, qobject_ref(entry->value));
qdict_del(src, entry->key);
}
}
qobj = qdict_get(qdict, renames->from);
- qobject_ref(qobj);
- qdict_put_obj(qdict, renames->to, qobj);
+ qdict_put_obj(qdict, renames->to, qobject_ref(qobj));
qdict_del(qdict, renames->from);
}