All of lore.kernel.org
 help / color / mirror / Atom feed
* [Patch 2/2] tabled: fix up the leak in cld_begin
@ 2009-08-05  7:32 Pete Zaitcev
  0 siblings, 0 replies; only message in thread
From: Pete Zaitcev @ 2009-08-05  7:32 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Project Hail List

Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>

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);
 	}
 

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2009-08-05  7:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-05  7:32 [Patch 2/2] tabled: fix up the leak in cld_begin Pete Zaitcev

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.