projects
/
Biblio-RFID.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added timeout to 3s for librfid tools
[Biblio-RFID.git]
/
lib
/
Biblio
/
RFID
/
Reader
/
librfid.pm
diff --git
a/lib/Biblio/RFID/Reader/librfid.pm
b/lib/Biblio/RFID/Reader/librfid.pm
index
72ea674
..
a72395e
100644
(file)
--- a/
lib/Biblio/RFID/Reader/librfid.pm
+++ b/
lib/Biblio/RFID/Reader/librfid.pm
@@
-44,6
+44,13
@@
sub init { 1 }
sub _grep_tool {
my ( $bin, $param, $coderef, $path ) = @_;
sub _grep_tool {
my ( $bin, $param, $coderef, $path ) = @_;
+ my $timeout = 3; # s
+
+ eval {
+
+ local $SIG{ALRM} = sub { die "timeout\n" };
+ alarm $timeout;
+
warn "# _grep_tool $bin $param\n";
open(my $s, '-|', "$bin $param 2>/dev/null") || die $!;
warn "# _grep_tool $bin $param\n";
open(my $s, '-|', "$bin $param 2>/dev/null") || die $!;
@@
-65,8
+72,12
@@
sub _grep_tool {
$coderef->( $sid, $iso );
}
$coderef->( $sid, $iso );
}
+ alarm(0);
close($s);
close($s);
- if ( $? >> 8 ) {
+
+ }; # eval
+
+ if ( $? >> 8 || $@ ) {
my $lsusb = `lsusb -d 076b:`;
if ( $lsusb =~ m/\S+\s+(\d+)\s+\S+\s+(\d+)/ ) {
my $cmd = "usbreset /dev/bus/usb/$1/$2";
my $lsusb = `lsusb -d 076b:`;
if ( $lsusb =~ m/\S+\s+(\d+)\s+\S+\s+(\d+)/ ) {
my $cmd = "usbreset /dev/bus/usb/$1/$2";
@@
-84,9
+95,10
@@
my $sid_iso;
sub inventory {
my @tags;
sub inventory {
my @tags;
+ $sid_iso = {};
_grep_tool 'librfid-tool', '--scan' => sub {
my ( $sid, $iso ) = @_;
_grep_tool 'librfid-tool', '--scan' => sub {
my ( $sid, $iso ) = @_;
- if ( $sid ) {
+ if ( $sid
&& ! exists $sid_iso->{$sid}
) {
push @tags, $sid;
$sid_iso->{$sid} = $iso;
}
push @tags, $sid;
$sid_iso->{$sid} = $iso;
}