summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2009-02-03 13:42:57 +0000
committerBastien Nocera <hadess@src.gnome.org>2009-02-03 13:42:57 +0000
commitc73732082459ad5e612046beee48e78bfb0f03ad (patch)
treec4676709772d32e84c97b043729e8024bf189e9f
parentfca96a55b11809719a247bc02d744aee31826733 (diff)
downloadgvfs-c73732082459ad5e612046beee48e78bfb0f03ad.tar.gz
Bug 570193 – Mounting phone connected via Bluetooth fails
2009-02-03 Bastien Nocera <hadess@hadess.net> Bug 570193 – Mounting phone connected via Bluetooth fails * daemon/gvfsbackendobexftp.c (_get_bluetooth_device_properties): Use a private connection to connect to the system D-Bus, thanks to Alexander Larsson svn path=/trunk/; revision=2194
-rw-r--r--ChangeLog8
-rw-r--r--daemon/gvfsbackendobexftp.c27
2 files changed, 26 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index c430339c..1d15794f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2009-02-03 Bastien Nocera <hadess@hadess.net>
+ Bug 570193 – Mounting phone connected via Bluetooth fails
+
+ * daemon/gvfsbackendobexftp.c (_get_bluetooth_device_properties):
+ Use a private connection to connect to the system D-Bus, thanks
+ to Alexander Larsson
+
+2009-02-03 Bastien Nocera <hadess@hadess.net>
+
* daemon/gvfsbackendobexftp.c (do_mount): Fix
possible double-free when the display name is freed
Avoid errors when the icon name couldn't be gathered
diff --git a/daemon/gvfsbackendobexftp.c b/daemon/gvfsbackendobexftp.c
index 2c457f9f..f1be2e8a 100644
--- a/daemon/gvfsbackendobexftp.c
+++ b/daemon/gvfsbackendobexftp.c
@@ -36,6 +36,8 @@
#include <gio/gio.h>
#include <libhal.h>
#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-bindings.h>
+#include <dbus/dbus-glib-lowlevel.h>
#include <bluetooth/bluetooth.h>
#include "gvfsbackendobexftp.h"
@@ -203,10 +205,14 @@ _get_bluetooth_name_and_icon (DBusGProxy *device, char **icon_name)
return NULL;
}
+
+#define _DBUS_POINTER_SHIFT(p) ((void*) (((char*)p) + sizeof (void*)))
+#define DBUS_G_CONNECTION_FROM_CONNECTION(x) ((DBusGConnection*) _DBUS_POINTER_SHIFT(x))
+
static gchar *
_get_bluetooth_device_properties (const char *bdaddr, char **icon_name)
{
- DBusGConnection *connection;
+ DBusConnection *conn;
DBusGProxy *manager;
GPtrArray *adapters;
gchar *name;
@@ -214,22 +220,24 @@ _get_bluetooth_device_properties (const char *bdaddr, char **icon_name)
name = NULL;
- connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
- if (connection == NULL)
+ conn = dbus_bus_get_private (DBUS_BUS_SYSTEM, NULL);
+ if (conn == NULL)
return name;
- manager = dbus_g_proxy_new_for_name (connection, "org.bluez",
+ manager = dbus_g_proxy_new_for_name (DBUS_G_CONNECTION_FROM_CONNECTION(conn), "org.bluez",
"/", "org.bluez.Manager");
if (manager == NULL)
{
- dbus_g_connection_unref (connection);
+ dbus_connection_close (conn);
+ dbus_connection_unref (conn);
return name;
}
if (dbus_g_proxy_call (manager, "ListAdapters", NULL, G_TYPE_INVALID, dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), &adapters, G_TYPE_INVALID) == FALSE)
{
g_object_unref (manager);
- dbus_g_connection_unref (connection);
+ dbus_connection_close (conn);
+ dbus_connection_unref (conn);
return name;
}
@@ -238,14 +246,14 @@ _get_bluetooth_device_properties (const char *bdaddr, char **icon_name)
DBusGProxy *adapter;
char *device_path;
- adapter = dbus_g_proxy_new_for_name (connection, "org.bluez",
+ adapter = dbus_g_proxy_new_for_name (DBUS_G_CONNECTION_FROM_CONNECTION(conn), "org.bluez",
g_ptr_array_index (adapters, i), "org.bluez.Adapter");
if (dbus_g_proxy_call (adapter, "FindDevice", NULL,
G_TYPE_STRING, bdaddr, G_TYPE_INVALID,
DBUS_TYPE_G_OBJECT_PATH, &device_path, G_TYPE_INVALID) != FALSE)
{
DBusGProxy *device;
- device = dbus_g_proxy_new_for_name (connection, "org.bluez", device_path, "org.bluez.Device");
+ device = dbus_g_proxy_new_for_name (DBUS_G_CONNECTION_FROM_CONNECTION(conn), "org.bluez", device_path, "org.bluez.Device");
name = _get_bluetooth_name_and_icon (device, icon_name);
g_object_unref (device);
}
@@ -254,7 +262,8 @@ _get_bluetooth_device_properties (const char *bdaddr, char **icon_name)
g_ptr_array_free (adapters, TRUE);
g_object_unref (manager);
- dbus_g_connection_unref (connection);
+ dbus_connection_close (conn);
+ dbus_connection_unref (conn);
return name;
}