richardphibel / rpms / systemd

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