|
Harald Hoyer |
db3a9f |
From 407df48ed36526f773dcc60ab6cef0f5ce441fe7 Mon Sep 17 00:00:00 2001
|
|
Harald Hoyer |
db3a9f |
From: David Herrmann <dh.herrmann@gmail.com>
|
|
Harald Hoyer |
db3a9f |
Date: Wed, 4 Sep 2013 12:36:19 +0200
|
|
Harald Hoyer |
db3a9f |
Subject: [PATCH] libudev: fix memleak when enumerating childs
|
|
Harald Hoyer |
db3a9f |
|
|
Harald Hoyer |
db3a9f |
We need to free udev-devices again if they don't match. Funny that no-one
|
|
Harald Hoyer |
db3a9f |
noticed it yet since valgrind is quite verbose about it.
|
|
Harald Hoyer |
db3a9f |
Fix it and free non-matching devices.
|
|
Harald Hoyer |
db3a9f |
---
|
|
Harald Hoyer |
db3a9f |
src/libudev/libudev-enumerate.c | 14 +++++++++-----
|
|
Harald Hoyer |
db3a9f |
1 file changed, 9 insertions(+), 5 deletions(-)
|
|
Harald Hoyer |
db3a9f |
|
|
Harald Hoyer |
db3a9f |
diff --git a/src/libudev/libudev-enumerate.c b/src/libudev/libudev-enumerate.c
|
|
Harald Hoyer |
db3a9f |
index 3e79107..b96e5b2 100644
|
|
Harald Hoyer |
db3a9f |
--- a/src/libudev/libudev-enumerate.c
|
|
Harald Hoyer |
db3a9f |
+++ b/src/libudev/libudev-enumerate.c
|
|
Harald Hoyer |
db3a9f |
@@ -829,23 +829,27 @@ nomatch:
|
|
Harald Hoyer |
db3a9f |
static int parent_add_child(struct udev_enumerate *enumerate, const char *path)
|
|
Harald Hoyer |
db3a9f |
{
|
|
Harald Hoyer |
db3a9f |
struct udev_device *dev;
|
|
Harald Hoyer |
db3a9f |
+ int r = 0;
|
|
Harald Hoyer |
db3a9f |
|
|
Harald Hoyer |
db3a9f |
dev = udev_device_new_from_syspath(enumerate->udev, path);
|
|
Harald Hoyer |
db3a9f |
if (dev == NULL)
|
|
Harald Hoyer |
db3a9f |
return -ENODEV;
|
|
Harald Hoyer |
db3a9f |
|
|
Harald Hoyer |
db3a9f |
if (!match_subsystem(enumerate, udev_device_get_subsystem(dev)))
|
|
Harald Hoyer |
db3a9f |
- return 0;
|
|
Harald Hoyer |
db3a9f |
+ goto nomatch;
|
|
Harald Hoyer |
db3a9f |
if (!match_sysname(enumerate, udev_device_get_sysname(dev)))
|
|
Harald Hoyer |
db3a9f |
- return 0;
|
|
Harald Hoyer |
db3a9f |
+ goto nomatch;
|
|
Harald Hoyer |
db3a9f |
if (!match_property(enumerate, dev))
|
|
Harald Hoyer |
db3a9f |
- return 0;
|
|
Harald Hoyer |
db3a9f |
+ goto nomatch;
|
|
Harald Hoyer |
db3a9f |
if (!match_sysattr(enumerate, dev))
|
|
Harald Hoyer |
db3a9f |
- return 0;
|
|
Harald Hoyer |
db3a9f |
+ goto nomatch;
|
|
Harald Hoyer |
db3a9f |
|
|
Harald Hoyer |
db3a9f |
syspath_add(enumerate, udev_device_get_syspath(dev));
|
|
Harald Hoyer |
db3a9f |
+ r = 1;
|
|
Harald Hoyer |
db3a9f |
+
|
|
Harald Hoyer |
db3a9f |
+nomatch:
|
|
Harald Hoyer |
db3a9f |
udev_device_unref(dev);
|
|
Harald Hoyer |
db3a9f |
- return 1;
|
|
Harald Hoyer |
db3a9f |
+ return r;
|
|
Harald Hoyer |
db3a9f |
}
|
|
Harald Hoyer |
db3a9f |
|
|
Harald Hoyer |
db3a9f |
static int parent_crawl_children(struct udev_enumerate *enumerate, const char *path, int maxdepth)
|