summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hcid/adapter.c5
-rw-r--r--hcid/dbus-common.c3
-rw-r--r--hcid/dbus-hci.c5
-rw-r--r--hcid/device.c24
-rw-r--r--hcid/device.h7
5 files changed, 15 insertions, 29 deletions
diff --git a/hcid/adapter.c b/hcid/adapter.c
index 763118e8..3897bbb1 100644
--- a/hcid/adapter.c
+++ b/hcid/adapter.c
@@ -3358,7 +3358,8 @@ static void discover_services_cb(gpointer user_data, sdp_list_t *recs, int err)
sdp_list_free(recs, (sdp_free_func_t) sdp_record_free);
- device = device_create(adapter, adapter->create->address, uuids);
+ device = device_create(adapter->create->conn, adapter,
+ adapter->create->address, uuids);
if (!device)
goto failed;
@@ -3490,7 +3491,7 @@ static DBusHandlerResult remove_device(DBusConnection *conn,
DBUS_TYPE_OBJECT_PATH, &device->path,
DBUS_TYPE_INVALID);
- device_destroy(device);
+ device_destroy(device, conn);
adapter->devices = g_slist_remove(adapter->devices, device);
return send_message_and_unref(conn, reply);
diff --git a/hcid/dbus-common.c b/hcid/dbus-common.c
index 166d7184..d3d3a151 100644
--- a/hcid/dbus-common.c
+++ b/hcid/dbus-common.c
@@ -349,9 +349,6 @@ int hcid_dbus_init(void)
if (!security_init(conn, BASE_PATH))
return -1;
- if (device_init(conn) == FALSE)
- return -1;
-
set_dbus_connection(conn);
return 0;
diff --git a/hcid/dbus-hci.c b/hcid/dbus-hci.c
index 837d47af..c1faa4a8 100644
--- a/hcid/dbus-hci.c
+++ b/hcid/dbus-hci.c
@@ -451,7 +451,8 @@ int unregister_adapter_path(const char *path)
}
if (adapter->devices) {
- g_slist_foreach(adapter->devices, (GFunc) device_destroy, NULL);
+ g_slist_foreach(adapter->devices,
+ (GFunc) device_destroy, connection);
g_slist_free(adapter->devices);
}
@@ -577,7 +578,7 @@ static void create_stored_device(char *key, char *value, void *user_data)
GSList *uuids = bt_string2list(value);
struct device *device;
- device = device_create(adapter, key, uuids);
+ device = device_create(connection, adapter, key, uuids);
if (device)
adapter->devices = g_slist_append(adapter->devices, device);
}
diff --git a/hcid/device.c b/hcid/device.c
index 5e129ab5..0f1ab4a4 100644
--- a/hcid/device.c
+++ b/hcid/device.c
@@ -711,18 +711,6 @@ int get_encryption_key_size(uint16_t dev_id, const bdaddr_t *baddr)
return size;
}
-static DBusConnection *connection = NULL;
-
-gboolean device_init(DBusConnection *conn)
-{
- /* FIXME: It's not necessary keep a connection reference */
- connection = dbus_connection_ref(conn);
- if (connection == NULL)
- return FALSE;
-
- return TRUE;
-}
-
static void device_free(struct device *device)
{
g_slist_foreach(device->uuids, (GFunc) g_free, NULL);
@@ -857,8 +845,8 @@ static DBusSignalVTable device_signals[] = {
{ NULL, NULL }
};
-struct device *device_create(struct adapter *adapter,
- const gchar *address, GSList *uuids)
+struct device *device_create(DBusConnection *conn, struct adapter *adapter,
+ const gchar *address, GSList *uuids)
{
struct device *device;
@@ -872,13 +860,13 @@ struct device *device_create(struct adapter *adapter,
debug("Creating device %s", device->path);
- if (dbus_connection_create_object_path(connection, device->path,
+ if (dbus_connection_create_object_path(conn, device->path,
device, device_unregister) == FALSE) {
device_free(device);
return NULL;
}
- dbus_connection_register_interface(connection, device->path,
+ dbus_connection_register_interface(conn, device->path,
DEVICE_INTERFACE, device_methods, device_signals, NULL);
device->address = g_strdup(address);
@@ -888,9 +876,9 @@ struct device *device_create(struct adapter *adapter,
return device;
}
-void device_destroy(struct device *device)
+void device_destroy(struct device *device, DBusConnection *conn)
{
debug("Removing device %s", device->path);
- dbus_connection_destroy_object_path(connection, device->path);
+ dbus_connection_destroy_object_path(conn, device->path);
}
diff --git a/hcid/device.h b/hcid/device.h
index dc55f0a8..524e0441 100644
--- a/hcid/device.h
+++ b/hcid/device.h
@@ -29,7 +29,6 @@ struct device {
GSList *uuids;
};
-gboolean device_init(DBusConnection *conn);
-struct device *device_create(struct adapter *adapter,
- const gchar *address, GSList *uuids);
-void device_destroy(struct device *device);
+struct device *device_create(DBusConnection *conn, struct adapter *adapter,
+ const gchar *address, GSList *uuids);
+void device_destroy(struct device *device, DBusConnection *conn);