summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Garcia-Suarez <rgarciasuarez@mandriva.com>2006-09-19 09:08:09 +0000
committerRafael Garcia-Suarez <rgarciasuarez@mandriva.com>2006-09-19 09:08:09 +0000
commit6c70c788d522cfaafd323fc779e078aded2caba1 (patch)
treefbb53eed1500c8115c998eabb54ce763c5726aa9
parent310bd5c03a5f47b69cf8ad67de8c9e7823063cd4 (diff)
downloadurpmi-6c70c788d522cfaafd323fc779e078aded2caba1.tar
urpmi-6c70c788d522cfaafd323fc779e078aded2caba1.tar.gz
urpmi-6c70c788d522cfaafd323fc779e078aded2caba1.tar.bz2
urpmi-6c70c788d522cfaafd323fc779e078aded2caba1.tar.xz
urpmi-6c70c788d522cfaafd323fc779e078aded2caba1.zip
When restarting urpmi, close leaked filehandles. Useful for the upgrade
2006->2007, since the URPM version in 2006 used to leak filehandles.
-rw-r--r--urpm/sys.pm15
-rwxr-xr-xurpmi11
2 files changed, 25 insertions, 1 deletions
diff --git a/urpm/sys.pm b/urpm/sys.pm
index dccd05b8..0b191265 100644
--- a/urpm/sys.pm
+++ b/urpm/sys.pm
@@ -3,6 +3,8 @@ package urpm::sys;
# $Id$
use strict;
+use warnings;
+use POSIX ();
(our $VERSION) = q$Revision$ =~ /(\d+)/;
@@ -168,6 +170,19 @@ sub mktempdir {
return $tmpdir;
}
+# temporary hack used by urpmi when restarting itself.
+sub fix_fd_leak {
+ opendir my $dirh, "/proc/$$/fd" or return undef;
+ my @fds = grep { /^(\d+)$/ && $1 > 2 } readdir $dirh;
+ closedir $dirh;
+ for (@fds) {
+ my $link = readlink("/proc/$$/fd/$_");
+ $link or next;
+ next if $link =~ m(^/(usr|dev)/) || $link !~ m(^/);
+ POSIX::close($_);
+ }
+}
+
1;
__END__
diff --git a/urpmi b/urpmi
index ce2f6095..bc107a07 100755
--- a/urpmi
+++ b/urpmi
@@ -171,10 +171,15 @@ if (grep { $_ eq '--restricted' } @ARGV) {
# Parse command line options
urpm::args::parse_cmdline(urpm => $urpm);
+if (@ARGV && $auto_select) {
+ print STDERR N("Error: can't use --auto-select along with package list.\n");
+ exit 1;
+}
+
# Verify that arguments were given
unless (@ARGV || $auto_select) {
if ($urpm::args::options{bug}) {
- print N("Error: To generate a bug report, specify the usual command-line arguments
+ print STDERR N("Error: To generate a bug report, specify the usual command-line arguments
along with --bug.\n");
exit 1;
}
@@ -312,6 +317,10 @@ if (exists $urpm->{options}{'priority-upgrade'} && $urpm->{options}{'priority-up
# we were run with --no-priority-upgrade (we were just restarted.)
# so, no need to update the media again
$auto_update = 0;
+ # temporary hack : if we were using an old version of URPM, file handles
+ # might have leaked, so close them (with some heuristics.)
+ require urpm::sys;
+ urpm::sys::fix_fd_leak();
# also, clean up rpm db log files, because rpm might have been upgraded
unlink </var/lib/rpm/__db.00?> unless $root;
}