summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Hollerbach <mail@marcel-hollerbach.de>2021-03-15 14:01:32 +0100
committerMarcel Hollerbach <mail@marcel-hollerbach.de>2021-03-15 14:16:34 +0100
commit046c5cd58e1feb8760a1fbf4a1bb4253ed40f947 (patch)
tree84943481030bd5b7e5d3b8a06ac9efcd10051db1
parent3cd6191409207813a3801c584996fa1942e0f9d1 (diff)
downloadefl-046c5cd58e1feb8760a1fbf4a1bb4253ed40f947.tar.gz
eeze_scanner: do not crash
the free logic here was wrong. The udev_device_get_parent results get automatically unrefed when the original device is deleted. This caused random segfaults when starting e.
-rw-r--r--src/lib/eeze/eeze_udev_walk.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/src/lib/eeze/eeze_udev_walk.c b/src/lib/eeze/eeze_udev_walk.c
index 4cd661b184..5df34178a8 100644
--- a/src/lib/eeze/eeze_udev_walk.c
+++ b/src/lib/eeze/eeze_udev_walk.c
@@ -40,7 +40,7 @@ EAPI const char *
eeze_udev_walk_get_sysattr(const char *syspath,
const char *sysattr)
{
- _udev_device *device, *child, *parent;
+ _udev_device *device, *parent;
const char *test = NULL;
if (!syspath)
@@ -49,18 +49,12 @@ eeze_udev_walk_get_sysattr(const char *syspath,
if (!(device = _new_device(syspath)))
return NULL;
- for (parent = device; parent;)
+ for (parent = device; parent && !test;)
{
- if ((test = udev_device_get_sysattr_value(parent, sysattr)))
- {
- test = eina_stringshare_add(test);
- udev_device_unref(parent);
- return test;
- }
- child = parent;
- parent = udev_device_get_parent(child);
- udev_device_unref(child);
+ test = udev_device_get_sysattr_value(parent, sysattr);
+ parent = udev_device_get_parent(parent);
}
- return NULL;
+ udev_device_unref(device);
+ return eina_stringshare_add(test);
}