Blame SOURCES/0530-device-make-sure-to-remove-all-device-units-sharing-.patch

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