Endlosschleife in "list"-Befehl wenn $hash in $hash nochmals vorkommt

Begonnen von Markus Bloch, 12 April 2013, 22:50:34

Vorheriges Thema - Nächstes Thema

Markus Bloch

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
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Markus Bloch

Upps, sollte eigentlich nach FHEM Development.

Kann das einer mal bitte verschieben?

Sorry und vielen Dank
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

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 :).

Markus Bloch

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
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)