diff --git a/src/device.c b/src/device.c
index afb0cfc..dbaf548 100644
--- a/src/device.c
+++ b/src/device.c
if (device->connected)
do_disconnect(device);
- g_slist_free_full(device->services, remove_service);
- device->services = NULL;
+ while (device->services != NULL) {
+ struct btd_service *service = device->services->data;
+
+ device->services = g_slist_remove(device->services, service);
+ service_remove(service);
+ }
if (!update_only)
err = btd_adapter_block_address(device->adapter,
void device_remove(struct btd_device *device, gboolean remove_stored)
{
-
DBG("Removing device %s", device->path);
if (device->bonding) {
g_slist_foreach(device->services, dev_disconn_service, NULL);
+ while (device->services != NULL) {
+ struct btd_service *service = device->services->data;
+
+ device->services = g_slist_remove(device->services, service);
+ service_remove(service);
+ }
+
g_slist_free(device->pending);
device->pending = NULL;
if (remove_stored)
device_remove_stored(device);
- g_slist_free_full(device->services, remove_service);
- device->services = NULL;
-
btd_device_unref(device);
}