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