HttpUtils timeout timer

Begonnen von StefanStrobel, 20 November 2014, 21:08:22

Vorheriges Thema - Nächstes Thema

StefanStrobel

Hallo,

bei non blocking GET in HttpUtils wird zwei mal ein InternalTimer für die Timeouts gesetzt, der jedoch nicht mehr entfernt wird. Wenn jemand mehrere Requests in schneller Folge absetzt, kann das dazu führen, dass der alte Timer einen folgenden Request abbricht.
Als Abhilfe hätte ich den angehängten Patch als Vorschlag. Ich bin mir leider nicht sicher, ob er nicht doch irgendwelche Seiteneffekte haben könnte.
Den Timer habe ich dabei auch so umgebaut, dass er nicht mehr auf $hash sondern auf "ConErr$hash->{Name}" hängt, um zu vermeiden, dass beim RemoveInternalTimer andere Timer des übergeordneten Moduls entfernt werden. Das wäre zum Beispiel beim HTTPMOD der Fall.

Was meint Ihr dazu?

Gruss
   Stefan

rudolfkoenig

Danke fuer den Hinweis und den Patch.
Ich habe es etwas abgeaendert (statt Namen einen lokalen Hash als Parameter verwendet), damit man fuer die gleiche FHEM-Instanz mehrere parallel laufende Aufrufe starten kann. Habs nur fuer ConnErr getestet, ein Testszenario fuer ReadErr aufzusetzen war mir zu aufwendig. Es waere schoen, wenn jemand das auch testen koennte.

Loredo

Prima Sache, danke für den Patch!  :)


So ganz passt es aber aktuell noch nicht. Seit heute erhalte ich diese Meldung:


2014.11.22 16:20:19 1: PERL WARNING: Odd number of elements in anonymous hash at FHEM/HttpUtils.pm line 228.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

betateilchen

Ich vermute (ohne in das coding geschaut zu haben), dass da irgendwo {$bla} anstatt $bla steht und deshalb die Zuweisung einer Hashreferenz die Warnung auslöst.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

betateilchen hat recht, ich habe wohl zu viel JavaScript gesehen in der letzten Zeit, und habe beim Test die Warnung uebersehen. Habs geaendert, getestet und eingecheckt.

betateilchen

Zitat von: rudolfkoenig am 23 November 2014, 12:01:57
ich habe wohl zu viel JavaScript gesehen

eine böse Krankheit, kaum heilbar...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!