From 2455ce226d312fcc9b038b146c697c09c24314a4 Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac Date: Thu, 1 Mar 2012 09:46:38 +0000 Subject: [PATCH] Fix leak of FID structure --- lib/metadata/metadata.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c index 9d9f620c2..90f48f7d5 100644 --- a/lib/metadata/metadata.c +++ b/lib/metadata/metadata.c @@ -2775,8 +2775,7 @@ static int _vg_read_orphan_pv(struct lvmcache_info *info, void *baton) return 1; } -/* Make orphan PVs look like a VG. FIXME multiple runs will leak memory - * allocated to PVs into the orphan VG pool which is now global. */ +/* Make orphan PVs look like a VG. */ static struct volume_group *_vg_read_orphans(struct cmd_context *cmd, int warnings, const char *orphan_vgname) @@ -2785,6 +2784,7 @@ static struct volume_group *_vg_read_orphans(struct cmd_context *cmd, struct lvmcache_vginfo *vginfo; struct volume_group *vg = NULL; struct _vg_read_orphan_baton baton; + struct pv_list *pvl; lvmcache_label_scan(cmd, 0); lvmcache_seed_infos_from_lvmetad(cmd); @@ -2796,6 +2796,8 @@ static struct volume_group *_vg_read_orphans(struct cmd_context *cmd, return_NULL; vg = fmt->orphan_vg; + dm_list_iterate_items(pvl, &vg->pvs) + pv_set_fid(pvl->pv, NULL); dm_list_init(&vg->pvs); vg->pv_count = 0; @@ -2803,7 +2805,7 @@ static struct volume_group *_vg_read_orphans(struct cmd_context *cmd, baton.vg = vg; if (!lvmcache_foreach_pv(vginfo, _vg_read_orphan_pv, &baton)) - return_NULL; + return_NULL; return vg; }