diff options
author | Tomas Bzatek <tbzatek@redhat.com> | 2012-07-03 17:48:31 +0200 |
---|---|---|
committer | Tomas Bzatek <tbzatek@redhat.com> | 2012-07-31 11:59:37 +0200 |
commit | 71fcc2ee835cab71a481159de8b97ff412da6e49 (patch) | |
tree | bfa6533d42c12c0a999ce4ddc6ece037de066e40 | |
parent | 93c79e3111fb8f48203b56da419a4aefa48d2d72 (diff) | |
download | gvfs-71fcc2ee835cab71a481159de8b97ff412da6e49.tar.gz |
gdbus: Remove unused extra_fd stuff
-rw-r--r-- | client/gvfsdaemondbus.c | 66 | ||||
-rw-r--r-- | daemon/gvfsdaemon.c | 146 |
2 files changed, 15 insertions, 197 deletions
diff --git a/client/gvfsdaemondbus.c b/client/gvfsdaemondbus.c index 3e09ea7b..9c843560 100644 --- a/client/gvfsdaemondbus.c +++ b/client/gvfsdaemondbus.c @@ -39,15 +39,9 @@ #include "gsysutils.h" #include <gvfsdbus.h> -/* Extra vfs-specific data for DBusConnections */ +/* Extra vfs-specific data for GDBusConnections */ typedef struct { - int extra_fd; - int extra_fd_count; char *async_dbus_id; - - /* Only used for async connections */ - GHashTable *outstanding_fds; - GSource *extra_fd_source; } VfsConnectionData; typedef struct _ThreadLocalConnections ThreadLocalConnections; @@ -186,20 +180,7 @@ connection_data_free (gpointer p) { VfsConnectionData *data = p; - if (data->extra_fd != -1) - close (data->extra_fd); - - if (data->extra_fd_source) - { - g_source_destroy (data->extra_fd_source); - g_source_unref (data->extra_fd_source); - } - - if (data->outstanding_fds) - g_hash_table_destroy (data->outstanding_fds); - g_free (data->async_dbus_id); - g_free (data); } @@ -229,14 +210,11 @@ vfs_connection_closed (GDBusConnection *connection, static void vfs_connection_setup (GDBusConnection *connection, - int extra_fd, gboolean async) { VfsConnectionData *connection_data; connection_data = g_new0 (VfsConnectionData, 1); - connection_data->extra_fd = extra_fd; - connection_data->extra_fd_count = 0; g_object_set_data_full (G_OBJECT (connection), "connection_data", connection_data, connection_data_free); @@ -303,7 +281,6 @@ typedef struct { const char *dbus_id; GDBusConnection *connection; - int extra_fd; GCancellable *cancellable; GVfsAsyncDBusCallback callback; @@ -343,14 +320,13 @@ async_got_private_connection_cb (GObject *source_object, g_print ("async_got_private_connection_cb, connection = %p\n", connection); if (!connection) { - close (async_call->extra_fd); async_call->io_error = g_error_copy (error); g_error_free (error); async_call_finish (async_call); return; } - vfs_connection_setup (connection, async_call->extra_fd, TRUE); + vfs_connection_setup (connection, TRUE); /* Maybe we already had a connection? This happens if we requested * the same owner several times in parallel. @@ -388,12 +364,12 @@ async_get_connection_response (GVfsDBusDaemon *proxy, { AsyncDBusCall *async_call = user_data; GError *error = NULL; - gchar *address1, *address2; + gchar *address1; g_print ("async_get_connection_response\n"); if (! gvfs_dbus_daemon_call_get_connection_finish (proxy, - &address1, &address2, + &address1, NULL, res, &error)) { @@ -403,18 +379,6 @@ async_get_connection_response (GVfsDBusDaemon *proxy, return; } - /* I don't know of any way to do an async connect */ - error = NULL; - async_call->extra_fd = _g_socket_connect (address2, &error); - if (async_call->extra_fd == -1) - { - g_set_error (&async_call->io_error, G_IO_ERROR, G_IO_ERROR_FAILED, - _("Error connecting to daemon: %s"), error->message); - g_error_free (error); - async_call_finish (async_call); - return; - } - g_dbus_connection_new_for_address (address1, G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, NULL, /* GDBusAuthObserver */ @@ -663,8 +627,7 @@ _g_dbus_connection_get_sync (const char *dbus_id, ThreadLocalConnections *local; GError *local_error; GDBusConnection *connection; - gchar *address1, *address2; - int extra_fd; + gchar *address1; GVfsDBusDaemon *daemon_proxy; gboolean res; @@ -727,7 +690,7 @@ _g_dbus_connection_get_sync (const char *dbus_id, return bus; /* We actually wanted the session bus, so done */ } - address1 = address2 = NULL; + address1 = NULL; daemon_proxy = gvfs_dbus_daemon_proxy_new_sync (local->session_bus, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS, dbus_id, @@ -739,7 +702,7 @@ _g_dbus_connection_get_sync (const char *dbus_id, res = gvfs_dbus_daemon_call_get_connection_sync (daemon_proxy, &address1, - &address2, + NULL, cancellable, error); g_object_unref (daemon_proxy); @@ -748,17 +711,6 @@ _g_dbus_connection_get_sync (const char *dbus_id, return NULL; local_error = NULL; - extra_fd = _g_socket_connect (address2, &local_error); - if (extra_fd == -1) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - _("Error connecting to daemon: %s"), local_error->message); - g_error_free (local_error); - g_free (address1); - g_free (address2); - return NULL; - } - connection = g_dbus_connection_new_for_address_sync (address1, G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, NULL, /* GDBusAuthObserver */ @@ -769,14 +721,12 @@ _g_dbus_connection_get_sync (const char *dbus_id, g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Error while getting peer-to-peer dbus connection: %s", local_error->message); - close (extra_fd); g_error_free (local_error); g_free (address1); - g_free (address2); return NULL; } - vfs_connection_setup (connection, extra_fd, FALSE); + vfs_connection_setup (connection, FALSE); g_hash_table_insert (local->connections, g_strdup (dbus_id), connection); diff --git a/daemon/gvfsdaemon.c b/daemon/gvfsdaemon.c index 37def200..d2ac22be 100644 --- a/daemon/gvfsdaemon.c +++ b/daemon/gvfsdaemon.c @@ -81,12 +81,8 @@ struct _GVfsDaemon typedef struct { GVfsDaemon *daemon; char *socket_dir; - guint io_watch; GDBusServer *server; - gboolean got_dbus_connection; - gboolean got_fd_connection; - int fd; GDBusConnection *conn; } NewConnectionData; @@ -603,9 +599,6 @@ new_connection_data_free (void *memory) if (data->socket_dir) rmdir (data->socket_dir); - if (data->io_watch) - g_source_remove (data->io_watch); - g_free (data->socket_dir); g_free (data); } @@ -665,18 +658,6 @@ daemon_peer_connection_setup (GVfsDaemon *daemon, { GVfsDBusDaemon *daemon_skeleton; GError *error; - - /* We wait until we have the extra fd */ - if (!data->got_fd_connection) - return; - - if (data->fd == -1) - { - /* The fd connection failed, abort the whole thing */ - g_warning ("Failed to accept client: %s", "accept of extra fd failed"); - g_object_unref (data->conn); - goto error_out; - } daemon_skeleton = gvfs_dbus_daemon_skeleton_new (); g_signal_connect (daemon_skeleton, "handle-cancel", G_CALLBACK (handle_cancel), daemon); @@ -691,7 +672,6 @@ daemon_peer_connection_setup (GVfsDaemon *daemon, error->message, g_quark_to_string (error->domain), error->code); g_error_free (error); g_object_unref (data->conn); - close (data->fd); goto error_out; } g_object_set_data_full (G_OBJECT (data->conn), "daemon_skeleton", daemon_skeleton, (GDestroyNotify) g_object_unref); @@ -808,12 +788,10 @@ create_socket_dir (void) #endif static void -generate_addresses (char **address1, - char **address2, - char **folder) +generate_address (char **address, + char **folder) { - *address1 = NULL; - *address2 = NULL; + *address = NULL; *folder = NULL; #ifdef USE_ABSTRACT_SOCKETS @@ -821,18 +799,14 @@ generate_addresses (char **address1, gchar tmp[9]; randomize_string (tmp); - *address1 = g_strdup_printf ("unix:abstract=/dbus-vfs-daemon/socket-%s", tmp); - - randomize_string (tmp); - *address2 = g_strdup_printf ("unix:abstract=/dbus-vfs-daemon/socket-%s", tmp); + *address = g_strdup_printf ("unix:abstract=/dbus-vfs-daemon/socket-%s", tmp); } #else { char *dir; dir = create_socket_dir (); - *address1 = g_strdup_printf ("unix:path=%s/socket1", dir); - *address2 = g_strdup_printf ("unix:path=%s/socket2", dir); + *address = g_strdup_printf ("unix:path=%s/socket", dir); *folder = dir; } #endif @@ -846,7 +820,6 @@ daemon_new_connection_func (GDBusServer *server, NewConnectionData *data; data = user_data; - data->got_dbus_connection = TRUE; /* Take ownership */ data->conn = g_object_ref (connection); @@ -862,94 +835,6 @@ daemon_new_connection_func (GDBusServer *server, return TRUE; } -static int -unix_socket_at (const char *address) -{ - int fd; - const char *path; - size_t path_len; - struct sockaddr_un addr; - - fd = socket (PF_UNIX, SOCK_STREAM, 0); - if (fd == -1) - return -1; - -#ifdef USE_ABSTRACT_SOCKETS - path = address + strlen ("unix:abstract="); -#else - path = address + strlen ("unix:path="); -#endif - - memset (&addr, 0, sizeof (addr)); - addr.sun_family = AF_UNIX; - path_len = strlen (path); - -#ifdef USE_ABSTRACT_SOCKETS - addr.sun_path[0] = '\0'; /* this is what says "use abstract" */ - path_len++; /* Account for the extra nul byte added to the start of sun_path */ - - strncpy (&addr.sun_path[1], path, path_len); -#else /* USE_ABSTRACT_SOCKETS */ - strncpy (addr.sun_path, path, path_len); - unlink (path); -#endif /* ! USE_ABSTRACT_SOCKETS */ - - if (bind (fd, (struct sockaddr*) &addr, - G_STRUCT_OFFSET (struct sockaddr_un, sun_path) + path_len) < 0) - { - close (fd); - return -1; - } - - if (listen (fd, 30 /* backlog */) < 0) - { - close (fd); - return -1; - } - - return fd; -} - -static gboolean -accept_new_fd_client (GIOChannel *channel, - GIOCondition cond, - gpointer callback_data) -{ - NewConnectionData *data = callback_data; - int fd; - int new_fd; - struct sockaddr_un addr; - socklen_t addrlen; - - g_print ("accept_new_fd_client\n"); - - data->got_fd_connection = TRUE; - - fd = g_io_channel_unix_get_fd (channel); - - addrlen = sizeof (addr); - new_fd = accept (fd, (struct sockaddr *) &addr, &addrlen); - - data->fd = new_fd; - data->io_watch = 0; - - /* Did we already accept the dbus connection, if so, finish it now */ - if (data->got_dbus_connection) - daemon_peer_connection_setup (data->daemon, - data->conn, - data); - else if (data->fd == -1) - { - /* Didn't accept a dbus connection, and there is no need for one now */ - g_warning ("Failed to accept client: %s", "accept of extra fd failed"); - g_dbus_server_stop (data->server); - g_object_unref (data->server); - new_connection_data_free (data); - } - - return FALSE; -} - static gboolean handle_get_connection (GVfsDBusDaemon *object, GDBusMethodInvocation *invocation, @@ -959,29 +844,19 @@ handle_get_connection (GVfsDBusDaemon *object, GDBusServer *server; GError *error; gchar *address1; - gchar *address2; NewConnectionData *data; - GIOChannel *channel; char *socket_dir; - int fd; gchar *guid; g_print ("called get_connection()\n"); - generate_addresses (&address1, &address2, &socket_dir); + generate_address (&address1, &socket_dir); data = g_new (NewConnectionData, 1); data->daemon = daemon; data->socket_dir = socket_dir; - data->got_fd_connection = FALSE; - data->got_dbus_connection = FALSE; - data->fd = -1; data->conn = NULL; - fd = unix_socket_at (address2); - if (fd == -1) - goto error_out; - guid = g_dbus_generate_guid (); error = NULL; server = g_dbus_server_new_sync (address1, @@ -1006,25 +881,18 @@ handle_get_connection (GVfsDBusDaemon *object, g_print ("Server is listening at: %s\n", g_dbus_server_get_client_address (server)); g_signal_connect (server, "new-connection", G_CALLBACK (daemon_new_connection_func), data); - channel = g_io_channel_unix_new (fd); - g_io_channel_set_close_on_unref (channel, TRUE); - data->io_watch = g_io_add_watch (channel, G_IO_IN | G_IO_HUP, accept_new_fd_client, data); - g_io_channel_unref (channel); - gvfs_dbus_daemon_complete_get_connection (object, invocation, address1, - address2); + ""); g_free (address1); - g_free (address2); return TRUE; error_out: g_print ("handle_get_connection: error_out\n"); g_free (data); g_free (address1); - g_free (address2); if (socket_dir) { rmdir (socket_dir); |