From: Dobrica Pavlinusic Date: Wed, 12 Feb 2014 15:14:38 +0000 (+0100) Subject: added timeout to 3s for librfid tools X-Git-Url: http://git.rot13.org/?p=Biblio-RFID.git;a=commitdiff_plain;h=ef24dc91714bcb2b7e097b579148fcce922710c9 added timeout to 3s for librfid tools --- diff --git a/lib/Biblio/RFID/Reader/librfid.pm b/lib/Biblio/RFID/Reader/librfid.pm index 0f559fd..a72395e 100644 --- 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 ) = @_; + 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 $!; @@ -65,8 +72,12 @@ sub _grep_tool { $coderef->( $sid, $iso ); } + alarm(0); 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";