From 340cdeb404a42806780124039b98676f6e6cc808 Mon Sep 17 00:00:00 2001 From: Mikel Astiz Date: Wed, 17 Oct 2012 12:07:09 +0200 Subject: [PATCH] device: Fix modifying list while iterating A list should not be modified while iterating on it, and in this case the solution is trivial: the code is just trying to free the whole list with a previous call to profile->device_remove() per list item. --- src/device.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/device.c b/src/device.c index f48faba13..bb0f89045 100644 --- a/src/device.c +++ b/src/device.c @@ -872,8 +872,6 @@ static void profile_remove(struct btd_profile *profile, struct btd_device *device) { profile->device_remove(profile, device); - - device->profiles = g_slist_remove(device->profiles, profile); } static gboolean do_disconnect(gpointer user_data) @@ -899,6 +897,8 @@ int device_block(struct btd_device *device, gboolean update_only) do_disconnect(device); g_slist_foreach(device->profiles, (GFunc) profile_remove, device); + g_slist_free(device->profiles); + device->profiles = NULL; if (!update_only) err = btd_adapter_block_address(device->adapter, -- 2.47.3