Hallo zusammen,
mir ist gerade beim entwickeln ein etwas unglücklicher Fehler untergekommen. Wenn sich in $hash nochmals eine Referenz von $hash befindet, stürzt FHEM in eine Endlosschleife, wenn man das Device mit "list <name>" anzeigen möchte.
Warum steht $hash in $hash?
bei BlockingCall verwende ich $hash als AbortArg. Das Funktionsergebnis (welches AbortArg enthält) muss ich in $hash speichern um es weiternutzen zu können.
Bei dem Versuch $hash auszugeben entsteht dadurch eine Endlos-Referenz, wodurch FHEM in einen Out Of Memory Fehler kommt.
Währe gut, wenn das berücksichtigt werden könnte.
Vielen Dank
Gruß
Markus
Upps, sollte eigentlich nach FHEM Development.
Kann das einer mal bitte verschieben?
Sorry und vielen Dank
Hab PrintHash (wird von list verwendet) erweitert, so dass es Endlosschleife erkennt und ignoriert.
Ich vermute solche Konstrukte (Referenz auf sich selbst) sind auch deswegen problematisch, weil delete($hash) den Speicher nicht wegraeumen kann. Jedenfalls gibt es beim XML/DOM solche Probleme bzw. extra Funktionen um diese Referenzen manuell zu loeschen.
@Markus: kannst Du bitte das pruefen (und bitte nicht fragen wie, ich weiss es auch nicht :).
Hi Rudi,
Ja funktioniert super. Da wo die Hash-Referenz im Hash ausgegeben wird, wird nun kein Inhalt angezeigt. Evtl. kann man in diesem Fall eine besondere Bezeichnung wie "{HASH}" verwenden. Damit man als Entwickler bei der Fehleranalyse weis, dass da die Hash-Referenz steht.
Vielen Dank
Gruß
Markus