mirror of https://github.com/xemu-project/xemu.git
monitor: move json init from OPEN event to init
At some point in the past, the OPEN event was changed to be issued from a bottom half. This creates a small window whereas a data callback registered in init may be invoked before the OPEN event has been issued. This is reproducible with: echo "{'execute': 'qmp_capabilities'}" | qemu-system-x86_64 -M none -qmp stdio We can fix this for the monitor by moving the parser initialization to init. The remaining state that is set in OPEN appears harmless. Reported-by: Daniel Berrange <berrange@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
b4a738bf93
commit
58617a795c
|
@ -4832,7 +4832,6 @@ static void monitor_control_event(void *opaque, int event)
|
|||
switch (event) {
|
||||
case CHR_EVENT_OPENED:
|
||||
mon->mc->command_mode = 0;
|
||||
json_message_parser_init(&mon->mc->parser, handle_qmp_command);
|
||||
data = get_qmp_greeting();
|
||||
monitor_json_emitter(mon, data);
|
||||
qobject_decref(data);
|
||||
|
@ -4840,6 +4839,7 @@ static void monitor_control_event(void *opaque, int event)
|
|||
break;
|
||||
case CHR_EVENT_CLOSED:
|
||||
json_message_parser_destroy(&mon->mc->parser);
|
||||
json_message_parser_init(&mon->mc->parser, handle_qmp_command);
|
||||
mon_refcount--;
|
||||
monitor_fdsets_cleanup();
|
||||
break;
|
||||
|
@ -4951,6 +4951,8 @@ void monitor_init(CharDriverState *chr, int flags)
|
|||
monitor_event, mon);
|
||||
}
|
||||
|
||||
json_message_parser_init(&mon->mc->parser, handle_qmp_command);
|
||||
|
||||
QLIST_INSERT_HEAD(&mon_list, mon, entry);
|
||||
if (!default_mon || (flags & MONITOR_IS_DEFAULT))
|
||||
default_mon = mon;
|
||||
|
|
Loading…
Reference in New Issue