mirror of https://github.com/xqemu/xqemu.git
char: use /chardevs container instead of chardevs list
Use object_resolve_path_component() and object_child_foreach() on /chardevs container instead of iterating over chardevs list. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
parent
474628e837
commit
6061162e52
|
@ -455,21 +455,24 @@ static const TypeInfo char_type_info = {
|
||||||
* mux will receive CHR_EVENT_OPENED notifications for the BE
|
* mux will receive CHR_EVENT_OPENED notifications for the BE
|
||||||
* immediately.
|
* immediately.
|
||||||
*/
|
*/
|
||||||
|
static int open_muxes(Object *child, void *opaque)
|
||||||
|
{
|
||||||
|
if (CHARDEV_IS_MUX(child)) {
|
||||||
|
/* send OPENED to all already-attached FEs */
|
||||||
|
mux_chr_send_all_event(CHARDEV(child), CHR_EVENT_OPENED);
|
||||||
|
/* mark mux as OPENED so any new FEs will immediately receive
|
||||||
|
* OPENED event
|
||||||
|
*/
|
||||||
|
qemu_chr_be_event(CHARDEV(child), CHR_EVENT_OPENED);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void muxes_realize_done(Notifier *notifier, void *unused)
|
static void muxes_realize_done(Notifier *notifier, void *unused)
|
||||||
{
|
{
|
||||||
Chardev *chr;
|
|
||||||
|
|
||||||
muxes_realized = true;
|
muxes_realized = true;
|
||||||
QTAILQ_FOREACH(chr, &chardevs, next) {
|
object_child_foreach(get_chardevs_root(), open_muxes, NULL);
|
||||||
if (CHARDEV_IS_MUX(chr)) {
|
|
||||||
/* send OPENED to all already-attached FEs */
|
|
||||||
mux_chr_send_all_event(CHARDEV(chr), CHR_EVENT_OPENED);
|
|
||||||
/* mark mux as OPENED so any new FEs will immediately receive
|
|
||||||
* OPENED event
|
|
||||||
*/
|
|
||||||
qemu_chr_be_event(chr, CHR_EVENT_OPENED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Notifier muxes_realize_notify = {
|
static Notifier muxes_realize_notify = {
|
||||||
|
@ -1068,21 +1071,29 @@ void qemu_chr_fe_disconnect(CharBackend *be)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int qmp_query_chardev_foreach(Object *obj, void *data)
|
||||||
|
{
|
||||||
|
Chardev *chr = CHARDEV(obj);
|
||||||
|
ChardevInfoList **list = data;
|
||||||
|
ChardevInfoList *info = g_malloc0(sizeof(*info));
|
||||||
|
|
||||||
|
info->value = g_malloc0(sizeof(*info->value));
|
||||||
|
info->value->label = g_strdup(chr->label);
|
||||||
|
info->value->filename = g_strdup(chr->filename);
|
||||||
|
info->value->frontend_open = chr->be && chr->be->fe_open;
|
||||||
|
|
||||||
|
info->next = *list;
|
||||||
|
*list = info;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
ChardevInfoList *qmp_query_chardev(Error **errp)
|
ChardevInfoList *qmp_query_chardev(Error **errp)
|
||||||
{
|
{
|
||||||
ChardevInfoList *chr_list = NULL;
|
ChardevInfoList *chr_list = NULL;
|
||||||
Chardev *chr;
|
|
||||||
|
|
||||||
QTAILQ_FOREACH(chr, &chardevs, next) {
|
object_child_foreach(get_chardevs_root(),
|
||||||
ChardevInfoList *info = g_malloc0(sizeof(*info));
|
qmp_query_chardev_foreach, &chr_list);
|
||||||
info->value = g_malloc0(sizeof(*info->value));
|
|
||||||
info->value->label = g_strdup(chr->label);
|
|
||||||
info->value->filename = g_strdup(chr->filename);
|
|
||||||
info->value->frontend_open = chr->be && chr->be->fe_open;
|
|
||||||
|
|
||||||
info->next = chr_list;
|
|
||||||
chr_list = info;
|
|
||||||
}
|
|
||||||
|
|
||||||
return chr_list;
|
return chr_list;
|
||||||
}
|
}
|
||||||
|
@ -1110,14 +1121,9 @@ ChardevBackendInfoList *qmp_query_chardev_backends(Error **errp)
|
||||||
|
|
||||||
Chardev *qemu_chr_find(const char *name)
|
Chardev *qemu_chr_find(const char *name)
|
||||||
{
|
{
|
||||||
Chardev *chr;
|
Object *obj = object_resolve_path_component(get_chardevs_root(), name);
|
||||||
|
|
||||||
QTAILQ_FOREACH(chr, &chardevs, next) {
|
return obj ? CHARDEV(obj) : NULL;
|
||||||
if (strcmp(chr->label, name) != 0)
|
|
||||||
continue;
|
|
||||||
return chr;
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QemuOptsList qemu_chardev_opts = {
|
QemuOptsList qemu_chardev_opts = {
|
||||||
|
|
Loading…
Reference in New Issue