From: Marc-André Lureau <marcandre.lur...@redhat.com> qemu_chardev_new() and qmp_chardev_add() are similar, let's factorize the code a bit.
Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- chardev/char.c | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index 4595a8d430..3def40c914 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -1005,7 +1005,7 @@ Chardev *qemu_chardev_new(const char *id, const char *typename, GMainContext *gcontext, Error **errp) { - Chardev *chr; + g_autoptr(Chardev) chr = NULL; g_autofree char *genid = NULL; if (!id) { @@ -1013,6 +1013,11 @@ Chardev *qemu_chardev_new(const char *id, const char *typename, id = genid; } + if (qemu_chr_find(id)) { + error_setg(errp, "Chardev with id '%s' already exists", id); + return NULL; + } + chr = chardev_new(id, typename, backend, gcontext, false, errp); if (!chr) { return NULL; @@ -1020,12 +1025,10 @@ Chardev *qemu_chardev_new(const char *id, const char *typename, if (!object_property_try_add_child(get_chardevs_root(), id, OBJECT(chr), errp)) { - object_unref(OBJECT(chr)); return NULL; } - object_unref(OBJECT(chr)); - return chr; + return chr; /* returns a shared/unowned reference */ } ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend, @@ -1034,29 +1037,19 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend, ERRP_GUARD(); const ChardevClass *cc; ChardevReturn *ret; - g_autoptr(Chardev) chr = NULL; - - if (qemu_chr_find(id)) { - error_setg(errp, "Chardev with id '%s' already exists", id); - return NULL; - } + Chardev *chr = NULL; cc = char_get_class(ChardevBackendKind_str(backend->type), errp); if (!cc) { goto err; } - chr = chardev_new(id, object_class_get_name(OBJECT_CLASS(cc)), - backend, NULL, false, errp); + chr = qemu_chardev_new(id, object_class_get_name(OBJECT_CLASS(cc)), + backend, NULL, errp); if (!chr) { goto err; } - if (!object_property_try_add_child(get_chardevs_root(), id, OBJECT(chr), - errp)) { - goto err; - } - ret = g_new0(ChardevReturn, 1); if (CHARDEV_IS_PTY(chr)) { ret->pty = g_strdup(chr->filename + 4); -- 2.32.0.264.g75ae10bc75