qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v2 14/25] monitor: add !qmp pre-conditions


From: Marc-André Lureau
Subject: [Qemu-devel] [PATCH v2 14/25] monitor: add !qmp pre-conditions
Date: Wed, 18 Jan 2017 20:03:21 +0400

It's not always obvious whether a function is meant to be used only with
HMP or QMP. Add a few pre-conditions to document this aspect and
eventually catch run-time bugs.

Signed-off-by: Marc-André Lureau <address@hidden>
---
 monitor.c | 47 +++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 45 insertions(+), 2 deletions(-)

diff --git a/monitor.c b/monitor.c
index 585f7b6a1a..c5c70d7e17 100644
--- a/monitor.c
+++ b/monitor.c
@@ -246,6 +246,8 @@ bool monitor_cur_is_qmp(void)
 
 void monitor_read_command(Monitor *mon, int show_prompt)
 {
+    assert(!monitor_is_qmp(mon));
+
     if (!mon->rs)
         return;
 
@@ -257,6 +259,8 @@ void monitor_read_command(Monitor *mon, int show_prompt)
 int monitor_read_password(Monitor *mon, ReadLineFunc *readline_func,
                           void *opaque)
 {
+    assert(!monitor_is_qmp(mon));
+
     if (mon->rs) {
         readline_start(mon->rs, "Password: ", 1, readline_func, opaque);
         /* prompt is printed on return from the command handler */
@@ -2548,6 +2552,8 @@ static const mon_cmd_t *monitor_parse_command(Monitor 
*mon,
     const mon_cmd_t *cmd;
     char cmdname[256];
 
+    assert(!monitor_is_qmp(mon));
+
     /* extract the command name */
     p = get_command_name(*cmdp, cmdname, sizeof(cmdname));
     if (!p)
@@ -2592,6 +2598,8 @@ static QDict *monitor_parse_arguments(Monitor *mon,
     char buf[1024];
     QDict *qdict = qdict_new();
 
+    assert(!monitor_is_qmp(mon));
+
     /* parse the parameters */
     typestr = cmd->args_type;
     for(;;) {
@@ -2971,6 +2979,8 @@ static void cmd_completion(Monitor *mon, const char 
*name, const char *list)
     char cmd[128];
     int len;
 
+    assert(!monitor_is_qmp(mon));
+
     p = list;
     for(;;) {
         pstart = p;
@@ -3000,6 +3010,8 @@ static void file_completion(Monitor *mon, const char 
*input)
     int input_path_len;
     const char *p;
 
+    assert(!monitor_is_qmp(mon));
+
     p = strrchr(input, '/');
     if (!p) {
         input_path_len = 0;
@@ -3552,6 +3564,8 @@ static void monitor_find_completion_by_table(Monitor *mon,
     const mon_cmd_t *cmd;
     BlockBackend *blk = NULL;
 
+    assert(!monitor_is_qmp(mon));
+
     if (nb_args <= 1) {
         /* command completion */
         if (nb_args == 0)
@@ -3633,6 +3647,8 @@ static void monitor_find_completion(void *opaque,
     char *args[MAX_ARGS];
     int nb_args, len;
 
+    assert(!monitor_is_qmp(mon));
+
     /* 1. parse the cmdline */
     if (parse_cmdline(cmdline, &nb_args, args) < 0) {
         return;
@@ -3801,6 +3817,8 @@ static void monitor_qmp_read(void *opaque, const uint8_t 
*buf, int size)
 
     cur_mon = opaque;
 
+    assert(monitor_is_qmp(cur_mon));
+
     json_message_parser_feed(&cur_mon->qmp.parser, (const char *) buf, size);
 
     cur_mon = old_mon;
@@ -3812,6 +3830,7 @@ static void monitor_read(void *opaque, const uint8_t 
*buf, int size)
     int i;
 
     cur_mon = opaque;
+    assert(!monitor_is_qmp(cur_mon));
 
     if (cur_mon->rs) {
         for (i = 0; i < size; i++)
@@ -3831,6 +3850,8 @@ static void monitor_command_cb(void *opaque, const char 
*cmdline,
 {
     Monitor *mon = opaque;
 
+    assert(!monitor_is_qmp(mon));
+
     monitor_suspend(mon);
     handle_hmp_command(mon, cmdline);
     monitor_resume(mon);
@@ -3838,6 +3859,8 @@ static void monitor_command_cb(void *opaque, const char 
*cmdline,
 
 int monitor_suspend(Monitor *mon)
 {
+    assert(!monitor_is_qmp(mon));
+
     if (!mon->rs)
         return -ENOTTY;
     mon->suspend_cnt++;
@@ -3846,6 +3869,8 @@ int monitor_suspend(Monitor *mon)
 
 void monitor_resume(Monitor *mon)
 {
+    assert(!monitor_is_qmp(mon));
+
     if (!mon->rs)
         return;
     if (--mon->suspend_cnt == 0)
@@ -3867,6 +3892,8 @@ static void monitor_qmp_event(void *opaque, int event)
     QObject *data;
     Monitor *mon = opaque;
 
+    assert(monitor_is_qmp(mon));
+
     switch (event) {
     case CHR_EVENT_OPENED:
         qmp_client_init(&mon->qmp.client, qmp_dispatch_return);
@@ -3890,6 +3917,8 @@ static void monitor_event(void *opaque, int event)
 {
     Monitor *mon = opaque;
 
+    assert(!monitor_is_qmp(mon));
+
     switch (event) {
     case CHR_EVENT_MUX_IN:
         qemu_mutex_lock(&mon->out_lock);
@@ -3962,15 +3991,23 @@ static void sortcmdlist(void)
 static void GCC_FMT_ATTR(2, 3) monitor_readline_printf(void *opaque,
                                                        const char *fmt, ...)
 {
+    Monitor *mon = opaque;
     va_list ap;
+
+    assert(!monitor_is_qmp(mon));
+
     va_start(ap, fmt);
-    monitor_vprintf(opaque, fmt, ap);
+    monitor_vprintf(mon, fmt, ap);
     va_end(ap);
 }
 
 static void monitor_readline_flush(void *opaque)
 {
-    monitor_flush(opaque);
+    Monitor *mon = opaque;
+
+    assert(!monitor_is_qmp(mon));
+
+    monitor_flush(mon);
 }
 
 /*
@@ -4059,6 +4096,8 @@ static void bdrv_password_cb(void *opaque, const char 
*password,
     int ret = 0;
     Error *local_err = NULL;
 
+    assert(!monitor_is_qmp(mon));
+
     bdrv_add_key(bs, password, &local_err);
     if (local_err) {
         error_report_err(local_err);
@@ -4076,6 +4115,8 @@ int monitor_read_bdrv_key_start(Monitor *mon, 
BlockDriverState *bs,
 {
     int err;
 
+    assert(!monitor_is_qmp(mon));
+
     monitor_printf(mon, "%s (%s) is encrypted.\n", bdrv_get_device_name(bs),
                    bdrv_get_encrypted_filename(bs));
 
@@ -4097,6 +4138,8 @@ int monitor_read_block_device_key(Monitor *mon, const 
char *device,
     Error *err = NULL;
     BlockBackend *blk;
 
+    assert(!monitor_is_qmp(mon));
+
     blk = blk_by_name(device);
     if (!blk) {
         monitor_printf(mon, "Device not found %s\n", device);
-- 
2.11.0.295.gd7dffce1c




reply via email to

[Prev in Thread] Current Thread [Next in Thread]