summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2006-06-16 10:26:12 +1000
committerNeil Brown <neilb@suse.de>2006-06-16 10:26:12 +1000
commiteed35d6661e9e53b7ec6d1312baa41bcd4d631ca (patch)
treee424fa400e87b83e133444d3f6275a4758b71ce4
parent02761a7c441485824acc6ae259192aaa16de097a (diff)
downloadmdadm-eed35d6661e9e53b7ec6d1312baa41bcd4d631ca.tar.gz
mdadm-eed35d6661e9e53b7ec6d1312baa41bcd4d631ca.tar.xz
mdadm-eed35d6661e9e53b7ec6d1312baa41bcd4d631ca.zip
Fix memory leak in monitor mode
When rescanning /dev, we didn't free the old list. Also don't search for device with a number of 0,0 Signed-off-by: Neil Brown <neilb@suse.de>
-rw-r--r--util.c13
-rw-r--r--xlate.h0
2 files changed, 13 insertions, 0 deletions
diff --git a/util.c b/util.c
index 5b994d6..d54d445 100644
--- a/util.c
+++ b/util.c
@@ -416,10 +416,23 @@ char *map_dev(int major, int minor, int create)
struct devmap *p;
char *std = NULL, *nonstd=NULL;
int did_check = 0;
+
+ if (major == 0 && minor == 0) {
+ if (!create)
+ return NULL;
+ else
+ return "0:0";
+ }
retry:
if (!devlist_ready) {
char *dev = "/dev";
struct stat stb;
+ while(devlist) {
+ struct devmap *d = devlist;
+ devlist = d->next;
+ free(d->name);
+ free(d);
+ }
if (lstat(dev, &stb)==0 &&
S_ISLNK(stb.st_mode))
dev = "/dev/.";
diff --git a/xlate.h b/xlate.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/xlate.h