enigma2-log hilft mir nicht weiter, vermutlich Threading-Problem

  • Code
    class HLHandler(SocketServer.BaseRequestHandler):
        def handle(self):
            data = self.request.recv(1024)
            reactor.callFromThread(pack_ok(data,self.client_address[0]))


    hat leider gar nichts gebarcht:

  • kann es damit zusammenhängen, das der UpnP-Renderer abgeschaltet wurde?

    Code
    -- Logs begin at Thu 1970-01-01 01:00:01 CET. --
    Jan 01 01:00:34 dm7080 enigma2[173]: WARN  event_protocol              Jan 01 01:00:34  response with error code '500' received upon our 'subscribe' request (coherence/upnp/core/event.py:233)
    Jan 01 01:00:34 dm7080 enigma2[173]: WARN  event_protocol              Jan 01 01:00:34  response with error code '500' received upon our 'subscribe' request (coherence/upnp/core/event.py:233)
    Jan 01 01:00:34 dm7080 enigma2[173]: WARN  event_protocol              Jan 01 01:00:34  response with error code '500' received upon our 'subscribe' request (coherence/upnp/core/event.py:233)
  • den code kann ich nun posten, evtl kann ja einer der anderen Profis erkennen wo das Problem sich versteckt?
    das Plugin selbst läuft auf der 7080, sowie jedoch an den Port etwas gesendet wird ist ende gelände
    (da ich nach wie vor keine Box für OE 2.2 zum Testen habe, kann ich da auch nicht mit try and error experimentieren, und etwas offensichtliches finde ich einfach nicht)

    • Offizieller Beitrag

    Hi,


    der Aufruf von callFromThread ist falsch.


    in deinem Fall wird innerhalb des falschen Threads nun nach wie vor pack_ok aufgerufen.


    Es müsste so aussehen:


    reactor.callFromThread(pack_ok, (data, webserver))


    Die Funktion callFromThread bekommt als erstes den Namen der Funktion die vom Thread aufgerufen werden soll.. und danach ggf. die Argumente die beim Aufruf übergeben werden sollen. Da es mehrere sind muss dieses als Tuple passieren.


    Du hattest pack_ok(data,webserver) .... damit wird dann die funktion pack_ok sofort aufgerufen noch aus dem falsch thread... das geht dann in die hose...


    cu

  • hmh, gilt das nur für OE 2.2? damit läuft bei mir nun nix mehr?

  • jetzt vollends verwirrt, damit läuft es aber anderswo wo nicht 2.2 ist:
    reactor.callFromThread(pack_ok(data,self.client_address[0]))

    Code
    reactor.callFromThread(pack_ok(data,self.client_address[0]))
    • Offizieller Beitrag
    Code
    reactor.callFromThread(pack_ok(data,self.client_address[0]))


    Natürlich läuft dieses falsche Konstrukt denn: Python ruft Funktionen von innen nach außen auf (eigentlich tut das jede "normale" Programmiersprache). Sprich das erste Konstrukt ruft am ende "callFromThread(returnValueOf_pack_ok)" Ist also unterm strich falsch und vor allem wirkungslos (bestenfalls crashed das nicht schon vorab).


    Die Lösung ist im prinzip trotzdem recht simpel. Sie könnte z.B. in etwa so aussehen:


    Ich hab das eben im Texteditor zusammengeschrieben (wie auch beim letzten mal, Tippfehler sind durchaus wahrscheinlich ;))

    • Offizieller Beitrag

    Hi,


    wobei es generell auch bei den älteren enigma2 Versionen eigentlich falsch ist GUI Funktionen aus anderen Threads zu benutzen.


    Da fehlt halt lediglich die Warning... bzw.. die Assertion. Aber es kann "tolle" Effekte auslösen und dann als Folge zu eigenartigen teilweise verzögerten nicht nachvollziehbaren Abstürzen kommen.


    Also ich würde das auch bei den anderen enigma2 Versionen NICHT machen :winking_face:


    Da es im alten Stand allerdings keinen support für twisted Threads gibt muss es da dann anders gelöst werden.


    cu

  • denke, ich habs nun endlich kapiert ( die Weiche für OE habe ich ja bereits bei timern und PicLoad)


    danke euch sehr und hoffe, es nun vollends hinzubekommen


    Zitat

    Also ich würde das auch bei den anderen enigma2 Versionen NICHT machen

    da fällt mir aber irgendwie nix sinnvolleres ein, bisher ist es auf drei verschiedenen Boxen so prima gelaufen
    (falls du als guter Geist da was aus dem Ärmel schütteln könntest?)