FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Markus Bloch am 12 April 2013, 22:50:34

Titel: Endlosschleife in "list"-Befehl wenn $hash in $hash nochmals vorkommt
Beitrag von: Markus Bloch am 12 April 2013, 22:50:34
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
Titel: Aw: Endlosschleife in "list"-Befehl wenn $hash in $hash nochmals vorkommt
Beitrag von: Markus Bloch am 12 April 2013, 23:43:10
Upps, sollte eigentlich nach FHEM Development.

Kann das einer mal bitte verschieben?

Sorry und vielen Dank
Titel: Aw: Endlosschleife in "list"-Befehl wenn $hash in $hash nochmals vorkommt
Beitrag von: rudolfkoenig am 13 April 2013, 12:44:22
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 :).
Titel: Aw: Endlosschleife in "list"-Befehl wenn $hash in $hash nochmals vorkommt
Beitrag von: Markus Bloch am 15 April 2013, 00:00:57
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