From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:60514) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QXHsX-0007dB-Ri for qemu-devel@nongnu.org; Thu, 16 Jun 2011 15:05:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QXHsW-0000KM-46 for qemu-devel@nongnu.org; Thu, 16 Jun 2011 15:05:21 -0400 Received: from e1.ny.us.ibm.com ([32.97.182.141]:41627) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QXHsV-0000Is-Rw for qemu-devel@nongnu.org; Thu, 16 Jun 2011 15:05:19 -0400 Received: from d01relay05.pok.ibm.com (d01relay05.pok.ibm.com [9.56.227.237]) by e1.ny.us.ibm.com (8.14.4/8.13.1) with ESMTP id p5GIZV4I009640 for ; Thu, 16 Jun 2011 14:35:31 -0400 Received: from d03av04.boulder.ibm.com (d03av04.boulder.ibm.com [9.17.195.170]) by d01relay05.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p5GIlGWt086062 for ; Thu, 16 Jun 2011 14:47:16 -0400 Received: from d03av04.boulder.ibm.com (loopback [127.0.0.1]) by d03av04.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p5GCkWvm006677 for ; Thu, 16 Jun 2011 06:46:34 -0600 Message-ID: <4DFA4F87.2090607@linux.vnet.ibm.com> Date: Thu, 16 Jun 2011 13:46:31 -0500 From: Michael Roth MIME-Version: 1.0 References: <1308081985-32394-1-git-send-email-mdroth@linux.vnet.ibm.com> <1308081985-32394-2-git-send-email-mdroth@linux.vnet.ibm.com> <20110616152937.0f654a95@doriath> In-Reply-To: <20110616152937.0f654a95@doriath> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v5 1/5] guest agent: command state class List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Luiz Capitulino Cc: aliguori@linux.vnet.ibm.com, agl@linux.vnet.ibm.com, qemu-devel@nongnu.org, Jes.Sorensen@redhat.com On 06/16/2011 01:29 PM, Luiz Capitulino wrote: > On Tue, 14 Jun 2011 15:06:21 -0500 > Michael Roth wrote: > >> >> Signed-off-by: Michael Roth >> --- >> qga/guest-agent-command-state.c | 73 +++++++++++++++++++++++++++++++++++++++ >> qga/guest-agent-core.h | 25 +++++++++++++ > > It's not possible to build this. I see that the last patch has the Makefile > changes, but what we want is that a patch introducing a .c file also updates > the Makefile, so that the .c file can be built. > I made it a point to test build each C file as introduced, but I'm not sure there's a way of doing incremental builds without modifying the Makefile manually anyway, since we'll be missing a main() function until qemu-ga.c. Or maybe I'm just missing something...any ideas? >> 2 files changed, 98 insertions(+), 0 deletions(-) >> create mode 100644 qga/guest-agent-command-state.c >> create mode 100644 qga/guest-agent-core.h >> >> diff --git a/qga/guest-agent-command-state.c b/qga/guest-agent-command-state.c >> new file mode 100644 >> index 0000000..969da23 >> --- /dev/null >> +++ b/qga/guest-agent-command-state.c >> @@ -0,0 +1,73 @@ >> +/* >> + * QEMU Guest Agent command state interfaces >> + * >> + * Copyright IBM Corp. 2011 >> + * >> + * Authors: >> + * Michael Roth >> + * >> + * This work is licensed under the terms of the GNU GPL, version 2 or later. >> + * See the COPYING file in the top-level directory. >> + */ >> +#include >> +#include "qga/guest-agent-core.h" >> + >> +struct GACommandState { >> + GSList *groups; >> +}; >> + >> +typedef struct GACommandGroup { >> + void (*init)(void); >> + void (*cleanup)(void); >> +} GACommandGroup; >> + >> +/* handle init/cleanup for stateful guest commands */ >> + >> +void ga_command_state_add(GACommandState *cs, >> + void (*init)(void), >> + void (*cleanup)(void)) >> +{ >> + GACommandGroup *cg = g_malloc0(sizeof(GACommandGroup)); > > This is linked against qemu-ga only, right? Otherwise I think we should > use qemu_mallocz(). And you probably want to check against NULL. > >> + cg->init = init; >> + cg->cleanup = cleanup; >> + cs->groups = g_slist_append(cs->groups, cg); > > Not that I'm asking to you change anything here, but we're going to > get a funny mix with QObjects :) > glib is a hard dependency here so i tried to stick with it where possible, since there's a lot of code where i'm kinda forced to use GObject stuff, like all the GIO functions for instance (GObject + GError + g_free etc). I think fsfreeze still uses qlist/qemu_free/etc, best I can do is fix that up to relegate all the non-glib stuff to qemu-ga.c and the qapi/qmp stuff it pulls in. >> +} >> + >> +static void ga_command_group_init(gpointer opaque, gpointer unused) >> +{ >> + GACommandGroup *cg = opaque; >> + >> + g_assert(cg); >> + if (cg->init) { >> + cg->init(); >> + } >> +} >> + >> +void ga_command_state_init_all(GACommandState *cs) >> +{ >> + g_assert(cs); >> + g_slist_foreach(cs->groups, ga_command_group_init, NULL); >> +} >> + >> +static void ga_command_group_cleanup(gpointer opaque, gpointer unused) >> +{ >> + GACommandGroup *cg = opaque; >> + >> + g_assert(cg); >> + if (cg->cleanup) { >> + cg->cleanup(); >> + } >> +} >> + >> +void ga_command_state_cleanup_all(GACommandState *cs) >> +{ >> + g_assert(cs); >> + g_slist_foreach(cs->groups, ga_command_group_cleanup, NULL); >> +} >> + >> +GACommandState *ga_command_state_new(void) >> +{ >> + GACommandState *cs = g_malloc0(sizeof(GACommandState)); >> + cs->groups = NULL; >> + return cs; >> +} >> diff --git a/qga/guest-agent-core.h b/qga/guest-agent-core.h >> new file mode 100644 >> index 0000000..688f120 >> --- /dev/null >> +++ b/qga/guest-agent-core.h >> @@ -0,0 +1,25 @@ >> +/* >> + * QEMU Guest Agent core declarations >> + * >> + * Copyright IBM Corp. 2011 >> + * >> + * Authors: >> + * Adam Litke >> + * Michael Roth >> + * >> + * This work is licensed under the terms of the GNU GPL, version 2 or later. >> + * See the COPYING file in the top-level directory. >> + */ >> +#include "qapi/qmp-core.h" >> +#include "qemu-common.h" >> + >> +#define QGA_VERSION "1.0" >> + >> +typedef struct GACommandState GACommandState; >> + >> +void ga_command_state_add(GACommandState *cs, >> + void (*init)(void), >> + void (*cleanup)(void)); >> +void ga_command_state_init_all(GACommandState *cs); >> +void ga_command_state_cleanup_all(GACommandState *cs); >> +GACommandState *ga_command_state_new(void); >