Skip to content

Commit

Permalink
hmp: Update current monitor only in handle_hmp_command()
Browse files Browse the repository at this point in the history
The current monitor is updated relatively early in the command handling
code even though only the command handler actually needs it.

The current monitor will become coroutine-local later, so we can only
update it when we know in which coroutine the command will be exectued.
Move it to handle_hmp_command() where this information will be
available.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <20201005155855.256490-5-kwolf@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
  • Loading branch information
kevmw authored and Markus Armbruster committed Oct 9, 2020
1 parent 947e474 commit ff04108
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 10 deletions.
10 changes: 5 additions & 5 deletions monitor/hmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1061,6 +1061,7 @@ void handle_hmp_command(MonitorHMP *mon, const char *cmdline)
QDict *qdict;
const HMPCommand *cmd;
const char *cmd_start = cmdline;
Monitor *old_mon;

trace_handle_hmp_command(mon, cmdline);

Expand All @@ -1079,7 +1080,11 @@ void handle_hmp_command(MonitorHMP *mon, const char *cmdline)
return;
}

/* old_mon is non-NULL when called from qmp_human_monitor_command() */
old_mon = monitor_set_cur(&mon->common);
cmd->cmd(&mon->common, qdict);
monitor_set_cur(old_mon);

qobject_unref(qdict);
}

Expand Down Expand Up @@ -1301,11 +1306,8 @@ static void monitor_find_completion(void *opaque,
static void monitor_read(void *opaque, const uint8_t *buf, int size)
{
MonitorHMP *mon = container_of(opaque, MonitorHMP, common);
Monitor *old_mon;
int i;

old_mon = monitor_set_cur(&mon->common);

if (mon->rs) {
for (i = 0; i < size; i++) {
readline_handle_byte(mon->rs, buf[i]);
Expand All @@ -1317,8 +1319,6 @@ static void monitor_read(void *opaque, const uint8_t *buf, int size)
handle_hmp_command(mon, (char *)buf);
}
}

monitor_set_cur(old_mon);
}

static void monitor_event(void *opaque, QEMUChrEvent event)
Expand Down
5 changes: 0 additions & 5 deletions monitor/misc.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,25 +120,20 @@ char *qmp_human_monitor_command(const char *command_line, bool has_cpu_index,
int64_t cpu_index, Error **errp)
{
char *output = NULL;
Monitor *old_mon;
MonitorHMP hmp = {};

monitor_data_init(&hmp.common, false, true, false);

old_mon = monitor_set_cur(&hmp.common);

if (has_cpu_index) {
int ret = monitor_set_cpu(&hmp.common, cpu_index);
if (ret < 0) {
monitor_set_cur(old_mon);
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index",
"a CPU number");
goto out;
}
}

handle_hmp_command(&hmp, command_line);
monitor_set_cur(old_mon);

WITH_QEMU_LOCK_GUARD(&hmp.common.mon_lock) {
if (qstring_get_length(hmp.common.outbuf) > 0) {
Expand Down

0 comments on commit ff04108

Please sign in to comment.