From b638d0b3f143ad6d770b8bcb26adffdd5b8f8d97 Mon Sep 17 00:00:00 2001 From: LeonGaultier Date: Thu, 31 Mar 2022 04:52:08 +0000 Subject: [PATCH] 82_LGTV_WebOS: fix crash in filehandle git-svn-id: https://svn.fhem.de/fhem/trunk@25900 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/82_LGTV_WebOS.pm | 2 +- fhem/lib/FHEM/Devices/LGTV/LGTVWebOS.pm | 37 +++++++++++++++++++++++-- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index b2beebb90..31eb51837 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - bugfix: 82_LGTV_WebOS: fix crash in filehandle - bugfix: 89_AndroidDB: Fixed bug in attribute createReadings - feature: 89_AndroidDB: Added creation of readings for shell commands - feature: 98_archetype: new option for FILTER in actual_.* attributes diff --git a/fhem/FHEM/82_LGTV_WebOS.pm b/fhem/FHEM/82_LGTV_WebOS.pm index d129a2ace..8f69fcd43 100644 --- a/fhem/FHEM/82_LGTV_WebOS.pm +++ b/fhem/FHEM/82_LGTV_WebOS.pm @@ -368,7 +368,7 @@ __END__ ], "release_status": "stable", "license": "GPL_2", - "version": "v3.6.2", + "version": "v3.6.5", "author": [ "Marko Oldenburg " ], diff --git a/fhem/lib/FHEM/Devices/LGTV/LGTVWebOS.pm b/fhem/lib/FHEM/Devices/LGTV/LGTVWebOS.pm index e39e970d7..b8d5308fe 100644 --- a/fhem/lib/FHEM/Devices/LGTV/LGTVWebOS.pm +++ b/fhem/lib/FHEM/Devices/LGTV/LGTVWebOS.pm @@ -704,7 +704,24 @@ sub Write { unless ( $hash->{CD} ); ::Log3( $name, 4, "LGTV_WebOS ($name) - $string" ); - syswrite( $hash->{CD}, $string ); + + try { + syswrite( $hash->{CD}, $string ); + } + catch { + if ( $_->isa('autodie::exception') && $_->matches(':io') ) { + ::Log3( $name, 2, +"LGTV_WebOS ($name) - can't write to socket, autodie exception: $_" + ); + return; + } + else { + ::Log3( $name, 2, + "LGTV_WebOS ($name) - can't write to socket: $_" ); + return; + } + }; + return; } @@ -736,7 +753,23 @@ sub Read { $hash->{helper}->{lastResponse} = int( ::gettimeofday() ); # Check Socket KeepAlive - $len = sysread( $hash->{CD}, $buf, 10240 ); + + try { + $len = sysread( $hash->{CD}, $buf, 10240 ); + } + catch { + if ( $_->isa('autodie::exception') && $_->matches(':io') ) { + ::Log3( $name, 2, +"LGTV_WebOS ($name) - can't read from socket, autodie exception: $_" + ); + return; + } + else { + ::Log3( $name, 2, + "LGTV_WebOS ($name) - can't read from socket: $_" ); + return; + } + }; if ( !defined($len) || !$len ) {