All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Roth <mdroth@linux.vnet.ibm.com>
To: Anthony Liguori <aliguori@us.ibm.com>
Cc: qemu-devel@nongnu.org, Alex Graf <agraf@suse.de>
Subject: Re: [Qemu-devel] [PATCH 1/2] qemu-ga: remove dependency on gio and gthread
Date: Sat, 23 Jul 2011 18:00:13 -0500	[thread overview]
Message-ID: <4E2B527D.80508@linux.vnet.ibm.com> (raw)
In-Reply-To: <1311456361-14162-1-git-send-email-aliguori@us.ibm.com>

On 07/23/2011 04:26 PM, Anthony Liguori wrote:
> As far as I can tell, there isn't a dependency on gthread.  Also, the only use
> of gio was to enable GSocket to accept a unix domain socket.
>
> Since GSocket isn't available on OpenSuSE 11.1, let's just remove that
> dependency.
>
> Signed-off-by: Anthony Liguori<aliguori@us.ibm.com>
> ---
>   configure |    6 +++---
>   qemu-ga.c |   34 +++++++++-------------------------
>   2 files changed, 12 insertions(+), 28 deletions(-)
>
> diff --git a/configure b/configure
> index 6911c3b..600da9b 100755
> --- a/configure
> +++ b/configure
> @@ -1811,9 +1811,9 @@ fi
>
>   ##########################################
>   # glib support probe
> -if $pkg_config --modversion gthread-2.0 gio-2.0>  /dev/null 2>&1 ; then
> -    glib_cflags=`$pkg_config --cflags gthread-2.0 gio-2.0 2>/dev/null`
> -    glib_libs=`$pkg_config --libs gthread-2.0 gio-2.0 2>/dev/null`
> +if $pkg_config --modversion glib-2.0>  /dev/null 2>&1 ; then
> +    glib_cflags=`$pkg_config --cflags glib-2.0 2>/dev/null`
> +    glib_libs=`$pkg_config --libs glib-2.0 2>/dev/null`
>       libs_softmmu="$glib_libs $libs_softmmu"
>       libs_tools="$glib_libs $libs_tools"
>   else
> diff --git a/qemu-ga.c b/qemu-ga.c
> index 6e2f61f..5d8b7cf 100644
> --- a/qemu-ga.c
> +++ b/qemu-ga.c
> @@ -14,7 +14,6 @@
>   #include<stdio.h>
>   #include<stdbool.h>
>   #include<glib.h>
> -#include<gio/gio.h>
>   #include<getopt.h>
>   #include<termios.h>
>   #include<syslog.h>
> @@ -37,9 +36,8 @@
>   struct GAState {
>       JSONMessageParser parser;
>       GMainLoop *main_loop;
> -    GSocket *conn_sock;
> +    int conn_fd;
>       GIOChannel *conn_channel;
> -    GSocket *listen_sock;
>       GIOChannel *listen_channel;
>       const char *path;
>       const char *method;
> @@ -412,18 +410,19 @@ static gboolean listen_channel_accept(GIOChannel *channel,
>                                         GIOCondition condition, gpointer data)
>   {
>       GAState *s = data;
> -    GError *err = NULL;
>       g_assert(channel != NULL);
>       int ret;
>       bool accepted = false;
> +    struct sockaddr_un addr;
> +    socklen_t addrlen = sizeof(addr);
>
> -    s->conn_sock = g_socket_accept(s->listen_sock, NULL,&err);
> -    if (err != NULL) {
> -        g_warning("error converting fd to gsocket: %s", err->message);
> -        g_error_free(err);
> +    s->conn_fd = qemu_accept(g_io_channel_unix_get_fd(s->listen_channel),
> +                             (struct sockaddr *)&addr,&addrlen);
> +    if (s->conn_fd == -1) {
> +        g_warning("error converting fd to gsocket: %s", strerror(errno));
>           goto out;
>       }
> -    ret = conn_channel_add(s, g_socket_get_fd(s->conn_sock));
> +    ret = conn_channel_add(s, s->conn_fd);
>       if (ret) {
>           g_warning("error setting up connection");
>           goto out;
> @@ -440,19 +439,8 @@ out:
>    */
>   static int listen_channel_add(GAState *s, int listen_fd, bool new)
>   {
> -    GError *err = NULL;
> -
>       if (new) {
>           s->listen_channel = g_io_channel_unix_new(listen_fd);
> -        if (s->listen_sock) {
> -            g_object_unref(s->listen_sock);
> -        }
> -        s->listen_sock = g_socket_new_from_fd(listen_fd,&err);
> -        if (err != NULL) {
> -            g_warning("error converting fd to gsocket: %s", err->message);
> -            g_error_free(err);
> -            return -1;
> -        }
>       }
>       g_io_add_watch(s->listen_channel, G_IO_IN,
>                      listen_channel_accept, s);
> @@ -466,8 +454,7 @@ static void conn_channel_close(GAState *s)
>   {
>       if (strcmp(s->method, "unix-listen") == 0) {
>           g_io_channel_shutdown(s->conn_channel, true, NULL);
> -        g_object_unref(s->conn_sock);
> -        s->conn_sock = NULL;
> +        s->conn_fd = -1;
>           listen_channel_add(s, 0, false);
>       } else if (strcmp(s->method, "virtio-serial") == 0) {
>           /* we spin on EOF for virtio-serial, so back off a bit. also,
> @@ -624,9 +611,6 @@ int main(int argc, char **argv)
>           become_daemon(pidfile);
>       }
>
> -    g_type_init();
> -    g_thread_init(NULL);
> -
>       s = qemu_mallocz(sizeof(GAState));
>       s->conn_channel = NULL;
>       s->path = path;

Was getting hangs when using -m unix-listen. Looks like GSocket must've 
been setting O_NONBLOCK on new connections. Also the conn_sock was only 
part of GAState for cleanup purposes, so we can lose conn_fd. I sent a 
re-spin with these changes as a reply to this patch.

      parent reply	other threads:[~2011-07-23 23:00 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-23 21:26 [Qemu-devel] [PATCH 1/2] qemu-ga: remove dependency on gio and gthread Anthony Liguori
2011-07-23 21:26 ` [Qemu-devel] [PATCH 2/2] guest-agent: only enable FSFREEZE when it's supported by the kernel Anthony Liguori
2011-07-23 23:01   ` Michael Roth
2011-07-23 22:57 ` [Qemu-devel] [PATCH] qemu-ga: remove dependency on gio and gthread Michael Roth
2011-07-23 23:00 ` Michael Roth [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E2B527D.80508@linux.vnet.ibm.com \
    --to=mdroth@linux.vnet.ibm.com \
    --cc=agraf@suse.de \
    --cc=aliguori@us.ibm.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.