Subject: pkg/12830: memory leak in pkg_delete
To: None <gnats-bugs@gnats.netbsd.org>
From: None <takashi.yamamoto@bigfoot.com>
List: netbsd-bugs
Date: 05/05/2001 00:58:21
>Number:         12830
>Category:       pkg
>Synopsis:       memory leak in pkg_delete
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri May 04 08:59:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     YAMAMOTO Takashi
>Release:        current(May 3 2001)
>Organization:
>Environment:
System: NetBSD capybara 1.5V NetBSD 1.5V (stg) #188: Thu May 3 19:17:17 JST 2001 takashi@capybara:/usr/src/sys/arch/i386/compile/stg i386
Architecture: i386
Machine: i386
>Description:
	'pkg_delete -R' causes memory leaks.
>How-To-Repeat:
	pkg_delete -R <some pkgs that has big dependencies like gnome or kde>
>Fix:
	apply following patch.

Index: perform.c
===================================================================
RCS file: /cvsroot/basesrc/usr.sbin/pkg_install/delete/perform.c,v
retrieving revision 1.32
diff -u -r1.32 perform.c
--- perform.c	2001/03/04 18:16:43	1.32
+++ perform.c	2001/05/04 15:55:30
@@ -384,8 +384,10 @@
 			TAILQ_INSERT_TAIL(&reqq, lpp, lp_link);
 
 			lpp2 = find_on_queue(&lpdelq, p->name);
-			if (lpp2)
+			if (lpp2) {
 				TAILQ_REMOVE(&lpdelq, lpp2, lp_link);
+				free_lpkg(lpp2);
+			}
 			lpp = alloc_lpkg(p->name);
 			TAILQ_INSERT_TAIL(&lpdelq, lpp, lp_link);
 
@@ -446,6 +448,7 @@
 		p = find_plist(&rPlist, PLIST_CWD);
 		if (!p) {
 			warnx("package '%s' doesn't have a prefix", lpp->lp_name);
+			free_plist(&rPlist);
 			fail = 1;
 			goto fail;
 		}
@@ -454,6 +457,7 @@
 		TAILQ_INSERT_HEAD(&lpfindq, thislpp, lp_link);
 
 		rc = require_find_recursive_down(lpp, &rPlist);
+		free_plist(&rPlist);
 		if (rc) {
 			fail = 1;
 			goto fail;

>Release-Note:
>Audit-Trail:
>Unformatted: