On 01/24/2010 04:59 AM, Avi Kivity wrote:
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.

I agree with you in principle but the model of passing (function pointer, opaque) is pervasive within QEMU. I'd prefer consistency here and if we want to switch to something more like a function object, we do it globally.

Regards,

Anthony Liguori


Somewhat related, we could have mon->suspend() and mon->resume() callbacks to avoid the check for monitor_ctrl_mode().




Reply via email to