MonitorHMP *hmp = MONITOR_HMP(mon);
assert(hmp->rs);
readline_restart(hmp->rs);
+ qemu_chr_fe_accept_input(&mon->chr);
qemu_mutex_unlock(&mon->mon_lock);
readline_show_prompt(hmp->rs);
} else {
+ qemu_chr_fe_accept_input(&mon->chr);
qemu_mutex_unlock(&mon->mon_lock);
}
}
Monitor *mon = opaque;
MonitorClass *cls = MONITOR_GET_CLASS(mon);
- if (cls->accept_input) {
- cls->accept_input(mon);
- }
-
- qemu_chr_fe_accept_input(&mon->chr);
+ cls->accept_input(mon);
}
void monitor_resume(Monitor *mon)
static bool monitor_qmp_requires_iothread(const Monitor *mon);
static void monitor_qmp_complete(UserCreatable *uc, Error **errp);
static bool monitor_qmp_prepare_delete(UserCreatable *uc, Error **errp);
+static void monitor_qmp_accept_input(Monitor *mon);
static void monitor_qmp_class_init(ObjectClass *cls, const void *data)
{
moncls->emit_event = monitor_qmp_emit_event;
moncls->requires_iothread = monitor_qmp_requires_iothread;
+ moncls->accept_input = monitor_qmp_accept_input;
ucc->complete = monitor_qmp_complete;
ucc->prepare_delete = monitor_qmp_prepare_delete;
error_setg(errp, "Deleting QMP monitors is not supported");
return false;
}
+
+static void monitor_qmp_accept_input(Monitor *mon)
+{
+ WITH_QEMU_LOCK_GUARD(&mon->mon_lock) {
+ qemu_chr_fe_accept_input(&mon->chr);
+ }
+}