From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pete Zaitcev Subject: [Patch 2/2] tabled: fix up the leak in cld_begin Date: Wed, 5 Aug 2009 01:32:17 -0600 Message-ID: <20090805013217.2a144a80@redhat.com> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Return-path: Sender: hail-devel-owner@vger.kernel.org List-ID: Content-Type: text/plain; charset="us-ascii" To: Jeff Garzik Cc: Project Hail List Signed-off-by: Pete Zaitcev diff --git a/server/cldu.c b/server/cldu.c index 2fc6c38..c9e5b98 100644 --- a/server/cldu.c +++ b/server/cldu.c @@ -598,8 +598,8 @@ int cld_begin(const char *thishost, const char *thiscell, } if (!ses.forced_hosts) { - GList *tmp, *host_list = NULL; - int i = 0; + GList *tmp, *host_list; + int i; if (cldc_getaddr(&host_list, thishost, debugging, cldu_p_log)) { /* Already logged error */ @@ -609,16 +609,20 @@ int cld_begin(const char *thishost, const char *thiscell, /* copy host_list into cld_session host array, * taking ownership of alloc'd strings along the way */ - tmp = host_list; - while (i < N_CLD && tmp) { - memcpy(&ses.cldv[i].h, tmp->data, - sizeof(struct cldc_host)); - ses.cldv[i].known = 1; - i++; - tmp = tmp->next; + i = 0; + for (tmp = host_list; tmp; tmp = tmp->next) { + struct cldc_host *hp = tmp->data; + if (i < N_CLD) { + memcpy(&ses.cldv[i].h, hp, + sizeof(struct cldc_host)); + ses.cldv[i].known = 1; + i++; + } else { + free(hp->host); + } + free(hp); } - /* FIXME: memleak, if list longer than N_CLD */ g_list_free(host_list); }