From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NZ31z-0008IY-Vy for qemu-devel@nongnu.org; Sun, 24 Jan 2010 09:01:36 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NZ31v-0008HG-F1 for qemu-devel@nongnu.org; Sun, 24 Jan 2010 09:01:35 -0500 Received: from [199.232.76.173] (port=57287 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NZ31u-0008Gx-VG for qemu-devel@nongnu.org; Sun, 24 Jan 2010 09:01:31 -0500 Received: from mail-gx0-f223.google.com ([209.85.217.223]:54128) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NZ31u-0006PI-Ij for qemu-devel@nongnu.org; Sun, 24 Jan 2010 09:01:30 -0500 Received: by gxk23 with SMTP id 23so2858387gxk.2 for ; Sun, 24 Jan 2010 06:01:29 -0800 (PST) Message-ID: <4B5C52B8.6050900@codemonkey.ws> Date: Sun, 24 Jan 2010 08:01:28 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [RFC] New API for asynchronous monitor commands References: <1264187031.2861.13.camel@aglitke> <4B5C2811.8060408@redhat.com> In-Reply-To: <4B5C2811.8060408@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Avi Kivity Cc: Luiz Capitulino , qemu-devel@nongnu.org, Adam Litke 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(). >