You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.6 KiB
43 lines
1.6 KiB
From 562bccced876d3bc0e9521ef31f6cc1e5cff9798 Mon Sep 17 00:00:00 2001 |
|
From: Franck Bui <fbui@suse.com> |
|
Date: Wed, 30 Aug 2017 17:16:16 +0200 |
|
Subject: [PATCH] device: make sure to remove all device units sharing the same |
|
sysfs path (#6679) |
|
|
|
When a device is unplugged all device units sharing the same sysfs path |
|
pointing to that device are supposed to be removed. |
|
|
|
However it didn't work since while iterating the device unit list containing |
|
all the relevant units, each unit was removed during each iteration of |
|
LIST_FOREACH. However LIST_FOREACH doesn't support this use case and |
|
LIST_FOREACH_SAFE must be use instead. |
|
|
|
(cherry picked from commit cc0df6cc35339976c367977dc292278a1939db0c) |
|
|
|
Related: #1408916 |
|
--- |
|
src/core/device.c | 4 ++-- |
|
1 file changed, 2 insertions(+), 2 deletions(-) |
|
|
|
diff --git a/src/core/device.c b/src/core/device.c |
|
index 63a04bdd3..2afa19f2b 100644 |
|
--- a/src/core/device.c |
|
+++ b/src/core/device.c |
|
@@ -487,7 +487,7 @@ static void device_update_found_one(Device *d, bool add, DeviceFound found, bool |
|
} |
|
|
|
static int device_update_found_by_sysfs(Manager *m, const char *sysfs, bool add, DeviceFound found, bool now) { |
|
- Device *d, *l; |
|
+ Device *d, *l, *n; |
|
|
|
assert(m); |
|
assert(sysfs); |
|
@@ -496,7 +496,7 @@ static int device_update_found_by_sysfs(Manager *m, const char *sysfs, bool add, |
|
return 0; |
|
|
|
l = hashmap_get(m->devices_by_sysfs, sysfs); |
|
- LIST_FOREACH(same_sysfs, d, l) |
|
+ LIST_FOREACH_SAFE(same_sysfs, d, n, l) |
|
device_update_found_one(d, add, found, now); |
|
|
|
return 0;
|
|
|