From bbf0c08e660d98481270a427e6c4c971ac72d412 Mon Sep 17 00:00:00 2001 From: justme1968 Date: Wed, 21 Jan 2015 10:35:30 +0000 Subject: [PATCH] 33_readingsProxy.pm: avoid endless loops for self referencing readingsProxys git-svn-id: https://svn.fhem.de/fhem/trunk@7650 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/33_readingsProxy.pm | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/fhem/FHEM/33_readingsProxy.pm b/fhem/FHEM/33_readingsProxy.pm index e15384a75..aa1823bfa 100644 --- a/fhem/FHEM/33_readingsProxy.pm +++ b/fhem/FHEM/33_readingsProxy.pm @@ -228,10 +228,16 @@ readingsProxy_Set($@) readingsSingleUpdate($hash, "lastCmd", $a[0], 0); } - Log3 $name, 4, "$name: set hash->{DEVICE} $v"; - return CommandSet(undef,"$hash->{DEVICE} ".$v); + if( $hash->{INSET} ) { + Log3 $name, 2, "$name: ERROR: endless loop detected"; + return "ERROR: endless loop detected for $hash->{NAME}"; + } - return undef; + Log3 $name, 4, "$name: set hash->{DEVICE} $v"; + $hash->{INSET} = 1; + my $ret = CommandSet(undef,"$hash->{DEVICE} ".$v); + delete($hash->{INSET}); + return $ret; } sub @@ -268,10 +274,16 @@ readingsProxy_Get($@) $v = $get_fn if( $get_fn ); } - Log3 $name, 4, "$name: get hash->{DEVICE} $v"; - return CommandGet(undef,"$hash->{DEVICE} ".$v); + if( $hash->{INGET} ) { + Log3 $name, 2, "$name: ERROR: endless loop detected"; + return "ERROR: endless loop detected for $hash->{NAME}"; + } - return undef; + Log3 $name, 4, "$name: get hash->{DEVICE} $v"; + $hash->{INSET} = 1; + my$ret = CommandGet(undef,"$hash->{DEVICE} ".$v); + delete($hash->{INSET}); + return $ret; } 1;