keep location open while we grab updateinfo.
authorespie <espie@openbsd.org>
Sat, 31 Jul 2010 11:17:22 +0000 (11:17 +0000)
committerespie <espie@openbsd.org>
Sat, 31 Jul 2010 11:17:22 +0000 (11:17 +0000)
deal with error fallout and need to forget unneeded stuff
(halves number of connections, roughly)

usr.sbin/pkg_add/OpenBSD/Handle.pm
usr.sbin/pkg_add/OpenBSD/PackageLocation.pm
usr.sbin/pkg_add/OpenBSD/Update.pm

index b2d7c49..ea7e06e 100644 (file)
@@ -1,5 +1,5 @@
 # ex:ts=8 sw=4:
-# $OpenBSD: Handle.pm,v 1.23 2010/06/30 10:51:04 espie Exp $
+# $OpenBSD: Handle.pm,v 1.24 2010/07/31 11:17:22 espie Exp $
 #
 # Copyright (c) 2007-2009 Marc Espie <espie@openbsd.org>
 #
@@ -38,12 +38,12 @@ sub cleanup
        $self->{error} //= $error;
        $self->{errorinfo} //= $errorinfo;
        if (defined $self->location) {
-               if (defined $self->{error} &&
-                   $self->{error} == ALREADY_INSTALLED) {
-                       $self->location->close_now;
-               } elsif (defined $self->{error} &&
-                   $self->{error} == CANT_INSTALL) {
-                       $self->location->close_with_client_error;
+               if (defined $self->{error}) {
+                       if ($self->{error} == BAD_PACKAGE) {
+                               $self->location->close_with_client_error;
+                       } else {
+                               $self->location->close_now;
+                       }
                }
                $self->location->wipe_info;
        }
@@ -185,7 +185,7 @@ sub get_plist
        if ($state->verbose >= 2) {
                $state->say("#1parsing #2", $state->deptree_header($pkg), $pkg);
        }
-       my $plist = $location->grabPlist;
+       my $plist = $location->plist;
        unless (defined $plist) {
                $state->say("Can't find CONTENTS from #1", $location->url);
                $location->close_with_client_error;
index d6cb3cd..201e866 100644 (file)
@@ -1,5 +1,5 @@
 # ex:ts=8 sw=4:
-# $OpenBSD: PackageLocation.pm,v 1.23 2010/07/28 12:19:54 espie Exp $
+# $OpenBSD: PackageLocation.pm,v 1.24 2010/07/31 11:17:22 espie Exp $
 #
 # Copyright (c) 2003-2007 Marc Espie <espie@openbsd.org>
 #
@@ -66,7 +66,7 @@ OpenBSD::Auto::cache(pkgname,
 OpenBSD::Auto::cache(update_info,
     sub {
        my $self = shift;
-       return $self->grabPlist(\&OpenBSD::PackingList::UpdateInfoOnly);
+       return $self->plist(\&OpenBSD::PackingList::UpdateInfoOnly);
     });
 
 
@@ -204,6 +204,13 @@ sub grabPlist
        }
 }
 
+sub forget
+{
+       my $self = shift;
+       $self->wipe_info;
+       $self->close_now;
+}
+
 sub wipe_info
 {
        my $self = shift;
index 9b193a4..1d7dbda 100644 (file)
@@ -1,5 +1,5 @@
 # ex:ts=8 sw=4:
-# $OpenBSD: Update.pm,v 1.143 2010/07/26 23:28:06 espie Exp $
+# $OpenBSD: Update.pm,v 1.144 2010/07/31 11:17:22 espie Exp $
 #
 # Copyright (c) 2004-2010 Marc Espie <espie@openbsd.org>
 #
@@ -158,6 +158,7 @@ sub process_handle
                    }
                    if ($p2->has('arch')) {
                        unless ($p2->{arch}->check($state->{arch})) {
+                           $loc->forget;
                            next;
                        }
                    }
@@ -168,12 +169,14 @@ sub process_handle
                    my $r = $plist->signature->compare($p2->signature);
                    if (defined $r && $r > 0 && !$state->defines('downgrade')) {
                        $oldfound = 1;
+                       $loc->forget;
                        next;
                    }
                    if ($plist->match_pkgpath($p2)) {
                        push(@l2, $loc);
                        next
                    }
+                   $loc->forget;
                }
                return \@l2;
            }));