summaryrefslogtreecommitdiffstats
path: root/urpm/sys.pm
diff options
context:
space:
mode:
Diffstat (limited to 'urpm/sys.pm')
-rw-r--r--urpm/sys.pm15
1 files changed, 15 insertions, 0 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__