qemu-ga: remove dependency on gio and gthread

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>
This commit is contained in:
Anthony Liguori 2011-07-23 17:57:47 -05:00
parent 4eb36d40da
commit 1fc7bd4a86
2 changed files with 12 additions and 29 deletions

6
configure vendored
View File

@ -1811,9 +1811,9 @@ fi
########################################## ##########################################
# glib support probe # glib support probe
if $pkg_config --modversion gthread-2.0 gio-2.0 > /dev/null 2>&1 ; then if $pkg_config --modversion glib-2.0 > /dev/null 2>&1 ; then
glib_cflags=`$pkg_config --cflags gthread-2.0 gio-2.0 2>/dev/null` glib_cflags=`$pkg_config --cflags glib-2.0 2>/dev/null`
glib_libs=`$pkg_config --libs gthread-2.0 gio-2.0 2>/dev/null` glib_libs=`$pkg_config --libs glib-2.0 2>/dev/null`
libs_softmmu="$glib_libs $libs_softmmu" libs_softmmu="$glib_libs $libs_softmmu"
libs_tools="$glib_libs $libs_tools" libs_tools="$glib_libs $libs_tools"
else else

View File

@ -14,7 +14,6 @@
#include <stdio.h> #include <stdio.h>
#include <stdbool.h> #include <stdbool.h>
#include <glib.h> #include <glib.h>
#include <gio/gio.h>
#include <getopt.h> #include <getopt.h>
#include <termios.h> #include <termios.h>
#include <syslog.h> #include <syslog.h>
@ -37,9 +36,7 @@
struct GAState { struct GAState {
JSONMessageParser parser; JSONMessageParser parser;
GMainLoop *main_loop; GMainLoop *main_loop;
GSocket *conn_sock;
GIOChannel *conn_channel; GIOChannel *conn_channel;
GSocket *listen_sock;
GIOChannel *listen_channel; GIOChannel *listen_channel;
const char *path; const char *path;
const char *method; const char *method;
@ -412,18 +409,20 @@ static gboolean listen_channel_accept(GIOChannel *channel,
GIOCondition condition, gpointer data) GIOCondition condition, gpointer data)
{ {
GAState *s = data; GAState *s = data;
GError *err = NULL;
g_assert(channel != NULL); g_assert(channel != NULL);
int ret; int ret, conn_fd;
bool accepted = false; bool accepted = false;
struct sockaddr_un addr;
socklen_t addrlen = sizeof(addr);
s->conn_sock = g_socket_accept(s->listen_sock, NULL, &err); conn_fd = qemu_accept(g_io_channel_unix_get_fd(s->listen_channel),
if (err != NULL) { (struct sockaddr *)&addr, &addrlen);
g_warning("error converting fd to gsocket: %s", err->message); if (conn_fd == -1) {
g_error_free(err); g_warning("error converting fd to gsocket: %s", strerror(errno));
goto out; goto out;
} }
ret = conn_channel_add(s, g_socket_get_fd(s->conn_sock)); fcntl(conn_fd, F_SETFL, O_NONBLOCK);
ret = conn_channel_add(s, conn_fd);
if (ret) { if (ret) {
g_warning("error setting up connection"); g_warning("error setting up connection");
goto out; goto out;
@ -440,19 +439,8 @@ out:
*/ */
static int listen_channel_add(GAState *s, int listen_fd, bool new) static int listen_channel_add(GAState *s, int listen_fd, bool new)
{ {
GError *err = NULL;
if (new) { if (new) {
s->listen_channel = g_io_channel_unix_new(listen_fd); 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, g_io_add_watch(s->listen_channel, G_IO_IN,
listen_channel_accept, s); listen_channel_accept, s);
@ -466,8 +454,6 @@ static void conn_channel_close(GAState *s)
{ {
if (strcmp(s->method, "unix-listen") == 0) { if (strcmp(s->method, "unix-listen") == 0) {
g_io_channel_shutdown(s->conn_channel, true, NULL); g_io_channel_shutdown(s->conn_channel, true, NULL);
g_object_unref(s->conn_sock);
s->conn_sock = NULL;
listen_channel_add(s, 0, false); listen_channel_add(s, 0, false);
} else if (strcmp(s->method, "virtio-serial") == 0) { } else if (strcmp(s->method, "virtio-serial") == 0) {
/* we spin on EOF for virtio-serial, so back off a bit. also, /* we spin on EOF for virtio-serial, so back off a bit. also,
@ -624,9 +610,6 @@ int main(int argc, char **argv)
become_daemon(pidfile); become_daemon(pidfile);
} }
g_type_init();
g_thread_init(NULL);
s = qemu_mallocz(sizeof(GAState)); s = qemu_mallocz(sizeof(GAState));
s->conn_channel = NULL; s->conn_channel = NULL;
s->path = path; s->path = path;