1

i3status-timers.dbus: Do not close file handles where possible

This commit is contained in:
eleksir
2020-03-08 13:57:58 +03:00
parent c59a66022a
commit d349fbd0f2

View File

@@ -1,6 +1,8 @@
#!/usr/bin/perl #!/usr/bin/perl
# vim: set ai noet ts=4 sw=4 sts=4 ft=perl : # vim: set ai noet ts=4 sw=4 sts=4 ft=perl :
# TODO: check for file descriptor leak for used fd munching technique
use strict; use strict;
use warnings "all"; use warnings "all";
@@ -49,6 +51,12 @@ my $CAPSPATH = &caps_find();
my $LAHANDLE; my $LAHANDLE;
my $MEMINFOHANDLE; my $MEMINFOHANDLE;
my $CPUTEMPHANDLE;
my %CPUSCALEHANDLE;
my %CPUSCALEMAXHANDLE;
my $ROUTEHANDLE;
my %IFSTATEHANDLE;
my $CAPSHANDLE;
my @IFACE = qw (wlan0); my @IFACE = qw (wlan0);
my %IFSTATE; my %IFSTATE;
@@ -63,8 +71,8 @@ while (1) {
# $cpuspeed = cpuspeed(); # $cpuspeed = cpuspeed();
$cputemp = cputemp(); $cputemp = cputemp();
$time = gettimestr(); $time = gettimestr();
$mem = &meminfo(); $mem = meminfo();
$net = &ifaces(); $net = ifaces();
$onesec_timer = 0; $onesec_timer = 0;
} }
@@ -188,13 +196,22 @@ sub ifaces() {
my $addr = "no addr"; my $addr = "no addr";
my $link; my $link;
open (I, "/sys/class/net/$if/operstate") or do { if (defined($IFSTATEHANDLE{$if})) {
$str .= " | ? $if: not exist"; if (tell($IFSTATEHANDLE{$if}) == -1) {
next; unless (open ($IFSTATEHANDLE{$if}, "/sys/class/net/$if/operstate")) {
}; $str .= " | ? $if: not exist";
next;
}
}
} else {
open ($IFSTATEHANDLE{$if}, "/sys/class/net/$if/operstate") or do {
$str .= " | ? $if: not exist";
next;
};
}
$IFSTATE{$if} = readline(*I); $IFSTATE{$if} = readline($IFSTATEHANDLE{$if});
close I; seek $IFSTATEHANDLE{$if}, SEEK_SET, 0;
$IFPSTATE{$if} = $IFSTATE{$if} unless(defined($IFPSTATE{$if})); $IFPSTATE{$if} = $IFSTATE{$if} unless(defined($IFPSTATE{$if}));
if ($IFSTATE{$if} eq "up\n") { if ($IFSTATE{$if} eq "up\n") {
@@ -209,9 +226,19 @@ sub ifaces() {
} }
unless (defined($IFADDR{$if})) { unless (defined($IFADDR{$if})) {
open(R, "/proc/self/net/route"); if (defined($ROUTEHANDLE)) {
my @route = <R>; open ($ROUTEHANDLE, "/proc/self/net/route") if (tell($ROUTEHANDLE) == -1);
close R; } else {
open ($ROUTEHANDLE, "/proc/self/net/route");
}
my @route;
while ( ! eof($ROUTEHANDLE)) {
push @route, readline($ROUTEHANDLE);
}
seek $ROUTEHANDLE, SEEK_SET, 0;
foreach my $r (@route) { foreach my $r (@route) {
if ((split(/\t/, $r, 2))[0] eq $if) { if ((split(/\t/, $r, 2))[0] eq $if) {
@@ -245,14 +272,37 @@ sub cpuspeed() {
next if($_ eq '.'); next if($_ eq '.');
next if($_ eq '..'); next if($_ eq '..');
open (S, "/sys/devices/system/cpu/cpufreq/$_/scaling_cur_freq") or do { next; }; if (defined($CPUSCALEHANDLE{$_})) {
my $speed = readline(*S); if (tell($CPUSCALEHANDLE{$_}) == -1) {
close S; unless (open ($CPUSCALEHANDLE{$_}, "/sys/devices/system/cpu/cpufreq/$_/scaling_cur_freq")) {
return '';
}
}
} else {
open ($CPUSCALEHANDLE{$_}, "/sys/devices/system/cpu/cpufreq/$_/scaling_cur_freq") or do {
return '';
};
}
my $speed = readline($CPUSCALEHANDLE{$_});
seek $CPUSCALEHANDLE{$_}, SEEK_SET, 0;
chomp $speed; chomp $speed;
$speed = int($speed / 1000); $speed = int($speed / 1000);
open (SM, "/sys/devices/system/cpu/cpufreq/$_/scaling_max_freq");
my $speedmax = readline(*SM); if (defined($CPUSCALEMAXHANDLE{$_})) {
close SM; if (tell($CPUSCALEMAXHANDLE{$_}) == -1) {
unless (open ($CPUSCALEMAXHANDLE{$_}, "/sys/devices/system/cpu/cpufreq/$_/scaling_max_freq")) {
return '';
}
}
} else {
open ($CPUSCALEMAXHANDLE{$_}, "/sys/devices/system/cpu/cpufreq/$_/scaling_max_freq") or do {
return '';
};
}
my $speedmax = readline($CPUSCALEMAXHANDLE{$_});
seek $CPUSCALEHANDLE{$_}, SEEK_SET, 0;
chomp $speedmax; chomp $speedmax;
$speedmax = int($speedmax / 1000); $speedmax = int($speedmax / 1000);
$str .= sprintf(" %s/%s", $speed, $speedmax); $str .= sprintf(" %s/%s", $speed, $speedmax);
@@ -264,12 +314,20 @@ sub cpuspeed() {
} }
sub cputemp() { sub cputemp() {
open(T, "/sys/class/hwmon/hwmon0/temp1_input") or do { if (defined($CPUTEMPHANDLE)) {
return ''; if (tell($CPUTEMPHANDLE) == -1) {
}; unless (open ($CPUTEMPHANDLE, "/sys/class/hwmon/hwmon0/temp1_input")) {
return '';
}
}
} else {
open ($CPUTEMPHANDLE, "/sys/class/hwmon/hwmon0/temp1_input") or do {
return '';
};
}
my $t = readline(*T); my $t = readline($CPUTEMPHANDLE);
close T; seek $CPUTEMPHANDLE, SEEK_SET, 0;
chomp $t; chomp $t;
$t = int($t); $t = int($t);
$t = int($t / 1000) if ($t > 1000); $t = int($t / 1000) if ($t > 1000);
@@ -279,13 +337,22 @@ sub cputemp() {
sub caps() { sub caps() {
if (defined($CAPSPATH)) { if (defined($CAPSPATH)) {
open(C, $CAPSPATH) or do { if (defined($CAPSHANDLE)) {
$CAPSPATH = undef; if (tell($CAPSHANDLE) == -1) {
return "? caps"; unless (open($CAPSHANDLE, $CAPSPATH)) {
}; $CAPSPATH = undef;
return "? caps";
}
}
} else {
open($CAPSHANDLE, $CAPSPATH) or do {
$CAPSPATH = undef;
return "? caps";
};
}
my $state = readline(*C); my $state = readline($CAPSHANDLE);
close C; seek $CAPSHANDLE, SEEK_SET, 0;
chomp $state; chomp $state;
if ($state eq '1') { if ($state eq '1') {