i3status-timers.dbus: Do not close file handles where possible
This commit is contained in:
@@ -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') {
|
||||||
|
|||||||
Reference in New Issue
Block a user