Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=44bf9c9a6af2d76d4de04b... Commit: 44bf9c9a6af2d76d4de04b456362abd4ed454ff9 Parent: 82e6b820b84512ffb9f124c5d450c1036e7dd843 Author: Zdenek Kabelac zkabelac@redhat.com AuthorDate: Thu Nov 14 17:08:20 2019 +0100 Committer: Zdenek Kabelac zkabelac@redhat.com CommitterDate: Thu Nov 14 18:06:42 2019 +0100
cov: fix memleak for duplicate device
For dev_in_device_list() != 0 allocated 'devl' was actually leaking - so instead allocate 'devl' only when !dev_in_device_list() and indent code around. --- lib/cache/lvmcache.c | 29 +++++++++++++++-------------- 1 files changed, 15 insertions(+), 14 deletions(-)
diff --git a/lib/cache/lvmcache.c b/lib/cache/lvmcache.c index 99818de..25d110d 100644 --- a/lib/cache/lvmcache.c +++ b/lib/cache/lvmcache.c @@ -1952,24 +1952,25 @@ struct lvmcache_info *lvmcache_add(struct labeller *labeller,
strncpy(dev->pvid, pvid_s, sizeof(dev->pvid));
- /* - * Keep the existing PV/dev in lvmcache, and save the - * new duplicate in the list of duplicates. After - * scanning is complete, compare the duplicate devs - * with those in lvmcache to check if one of the - * duplicates is preferred and if so switch lvmcache to - * use it. - */ - - if (!(devl = zalloc(sizeof(*devl)))) - return_NULL; - devl->dev = dev; - /* shouldn't happen */ if (dev_in_device_list(dev, &_initial_duplicates)) log_debug_cache("Initial duplicate already in list %s", dev_name(dev)); - else + else { + /* + * Keep the existing PV/dev in lvmcache, and save the + * new duplicate in the list of duplicates. After + * scanning is complete, compare the duplicate devs + * with those in lvmcache to check if one of the + * duplicates is preferred and if so switch lvmcache to + * use it. + */ + + if (!(devl = zalloc(sizeof(*devl)))) + return_NULL; + devl->dev = dev; + dm_list_add(&_initial_duplicates, &devl->list); + }
if (is_duplicate) *is_duplicate = 1;