|
From: | Avi Kivity |
Subject: | Re: [Qemu-devel] [RFC] New API for asynchronous monitor commands |
Date: | Sun, 24 Jan 2010 12:59:29 +0200 |
User-agent: | Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100120 Fedora/3.0.1-1.fc12 Thunderbird/3.0.1 |
On 01/22/2010 09:03 PM, Adam Litke wrote:
+static void do_async_cmd_handler(Monitor *mon, const mon_cmd_t *cmd, + const QDict *params) +{ + if (monitor_ctrl_mode(mon)) { + cmd->mhandler.cmd_async(mon, params, qmp_monitor_complete, mon); + } else { + int ret; + + UserQMPCompletionData *cb_data = qemu_malloc(sizeof(*cb_data)); + cb_data->mon = mon; + cb_data->user_print = cmd->user_print; + monitor_suspend(mon); + ret = cmd->mhandler.cmd_async(mon, params, + user_monitor_complete, cb_data); + if (ret< 0) { + monitor_resume(mon); + qemu_free(cb_data); + } + } +}
Instead of sending opaques everywhere (and having them correspond to different types in different cases), I would prefer it if the handle always accepted an AsyncCommandCompletion *. That makes it easier to follow the code, since there are no opaques you have to guess the true type of.
Somewhat related, we could have mon->suspend() and mon->resume() callbacks to avoid the check for monitor_ctrl_mode().
-- error compiling committee.c: too many arguments to function
[Prev in Thread] | Current Thread | [Next in Thread] |