cleanup some memory issues; fix iteration over DB and proper freeing of headers;...
authorcturner <devnull@localhost>
Sun, 7 Apr 2002 07:22:29 +0000 (07:22 +0000)
committercturner <devnull@localhost>
Sun, 7 Apr 2002 07:22:29 +0000 (07:22 +0000)
CVS patchset: 5376
CVS date: 2002/04/07 07:22:29

perl-RPM2/RPM2.pm
perl-RPM2/RPM2.xs
perl-RPM2/test.pl

index cc11d27..fdbeaec 100644 (file)
@@ -47,12 +47,6 @@ sub close_rpm_db {
   my $self = shift;
   die "db not open" unless $self->{db};
 
-  foreach my $iter (@{$self->{active_iterators}}) {
-    $iter->_cleanup();
-  }
-
-  $self->{active_iterators} = [];
-
   RPM2::_close_rpm_db($self->{db});
   $self->{db} = undef;
 }
@@ -63,18 +57,10 @@ sub iterator {
 
   die "db closed" unless $self->{db};
   my $iter = RPM2::PackageIterator->new_iterator($self->{db}, $str);
-  push @{$self->{active_iterators}}, $iter;
 
   return $iter;
 }
 
-sub _remove_iter {
-  my $self = shift;
-  my $iter = shift;
-
-  @{$self->{active_iterators}} = grep { $_ != $iter } @{$self->{active_iterators}};
-}
-
 sub DESTROY {
   my $self = shift;
 
@@ -159,6 +145,7 @@ sub new_iterator {
 
   my $self = bless {}, $class;
   $self->{iter} = RPM2::_init_iterator($db, RPM2::PackageIterator::RPMDBI_PACKAGES, $key, defined $key ? length $key : 0);
+  $self->{db} = $db;
 
   return $self;
 }
index 0cde688..3272f85 100644 (file)
@@ -60,8 +60,13 @@ _destroy_iterator(i)
 Header
 _iterator_next(i)
        rpmdbMatchIterator i
+    PREINIT:
+       Header ret;
     CODE:
-       RETVAL = rpmdbNextIterator(i);
+       ret = rpmdbNextIterator(i);
+       if (ret)
+               headerLink(ret);
+       RETVAL = ret;
     OUTPUT:
        RETVAL
 
index be8d78a..9ef370a 100644 (file)
@@ -27,24 +27,25 @@ ok(defined $db);
 while(1) {
   my @h;
   push @h, [ RPM2->open_package_file($_) ]
-    foreach <~/rhn/RPMS/*.rpm>;
+    foreach <~/rhn/bs/6.2/RPMS/*.rpm>;
 
   print $_->[0]->as_nvre, "\n" foreach @h;
 }
 
-exit;
-
-my $i = $db->iterator();
-while (my $h = $i->next) {
-  my $epoch = $h->tag('epoch');
-  my $epoch_str = '';
-  $epoch_str = "$epoch:" if defined $epoch;
-
-  print $epoch_str . join("-", map { $h->tag($_) } qw/name version release/);
-  my @files = $h->files;
-  my $n = scalar @files;
-  print " ($n files)";
-  print "\n";
+#exit;
+
+while (1) {
+  my $i = $db->iterator();
+  while (my $h = $i->next) {
+    my $epoch = $h->tag('epoch');
+    my $epoch_str = '';
+    $epoch_str = "$epoch:" if defined $epoch;
+
+    print $epoch_str . join("-", map { $h->tag($_) } qw/name version release/);
+    my @files = $h->files;
+    my $n = scalar @files;
+    print " ($n files)";
+    print "\n";
+  }
 }
-
 $db->close_rpm_db();