plugged memory leaks in upgrade
authorewt <devnull@localhost>
Fri, 6 Dec 1996 04:07:28 +0000 (04:07 +0000)
committerewt <devnull@localhost>
Fri, 6 Dec 1996 04:07:28 +0000 (04:07 +0000)
CVS patchset: 1210
CVS date: 1996/12/06 04:07:28

lib/install.c
lib/rpmdb.c

index f16b34b..62ac75c 100644 (file)
@@ -270,8 +270,11 @@ int rpmInstallPackage(char * rootdir, rpmdb db, int fd, char * location,
                if (matches.recs[i].recOffset != otherOffset) {
                    if (!(flags & RPMINSTALL_UPGRADETOOLD)) 
                        if (rpmEnsureOlder(db, name, version, release, 
-                                       matches.recs[i].recOffset)) 
+                                       matches.recs[i].recOffset)) {
+                           headerFree(h);
+                           dbiFreeIndexRecord(matches);
                            return 2;
+                       }
                    *intptr++ = matches.recs[i].recOffset;
                }
            }
@@ -279,6 +282,8 @@ int rpmInstallPackage(char * rootdir, rpmdb db, int fd, char * location,
        }
     }
 
+    dbiFreeIndexRecord(matches);
+
     fileList = NULL;
     if (headerGetEntry(h, RPMTAG_FILENAMES, &type, (void **) &fileList, 
                 &fileCount)) {
@@ -826,6 +831,8 @@ static int packageAlreadyInstalled(rpmdb db, char * name, char * version,
 
            headerFree(sech);
        }
+
+       dbiFreeIndexRecord(matches);
     }
 
     return 0;
index de9bfe5..187ff60 100644 (file)
@@ -514,6 +514,7 @@ int rpmdbAdd(rpmdb db, Header dbentry) {
 
 int rpmdbUpdateRecord(rpmdb db, int offset, Header newHeader) {
     Header oldHeader;
+    int oldSize;
 
     oldHeader = rpmdbGetRecord(db, offset);
     if (!oldHeader) {
@@ -522,8 +523,10 @@ int rpmdbUpdateRecord(rpmdb db, int offset, Header newHeader) {
        return 1;
     }
 
-    if (headerSizeof(oldHeader, HEADER_MAGIC_NO) !=
-       headerSizeof(newHeader, HEADER_MAGIC_NO)) {
+    oldSize = headerSizeof(oldHeader, HEADER_MAGIC_NO);
+    headerFree(oldHeader);
+
+    if (oldSize != headerSizeof(newHeader, HEADER_MAGIC_NO)) {
        rpmMessage(RPMMESS_DEBUG, "header changed size!");
        if (rpmdbRemove(db, offset, 1))
            return 1;