diff options
author | Luiz Capitulino <lcapitulino@redhat.com> | 2010-02-08 17:01:30 -0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2010-02-10 13:46:17 -0600 |
commit | 47116d1c90cdac94cb9da270320dcf0d5ce1cfe2 (patch) | |
tree | fe8e5304f0049ed1506bbd3d0130f5d13f35e2c2 /monitor.c | |
parent | 27a749fb733dc64b7a215998be7f228a09bb27a7 (diff) | |
download | qemu-47116d1c90cdac94cb9da270320dcf0d5ce1cfe2.tar.gz qemu-47116d1c90cdac94cb9da270320dcf0d5ce1cfe2.tar.bz2 qemu-47116d1c90cdac94cb9da270320dcf0d5ce1cfe2.zip |
QMP: Don't leak on connection close
QMP's chardev event callback doesn't call
json_message_parser_destroy() on CHR_EVENT_CLOSED. As the call
to json_message_parser_init() on CHR_EVENT_OPENED allocates memory,
we'are leaking on close.
Fix that by just calling json_message_parser_destroy() on
CHR_EVENT_CLOSED.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'monitor.c')
-rw-r--r-- | monitor.c | 12 |
1 files changed, 8 insertions, 4 deletions
@@ -4404,16 +4404,20 @@ static QObject *get_qmp_greeting(void) */ static void monitor_control_event(void *opaque, int event) { - if (event == CHR_EVENT_OPENED) { - QObject *data; - Monitor *mon = opaque; + QObject *data; + Monitor *mon = opaque; + 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); + break; + case CHR_EVENT_CLOSED: + json_message_parser_destroy(&mon->mc->parser); + break; } } |