Absturz(GS) in processDelay und MovieList beim Zusammenstellen der Aufnahmeliste

  • Hallo,


    mit dreambox-image-dm800se-20130912.nfi habe ich zwei mal diesen GS erlebt:


    action -> InfobarMovieListActions movieList
    allocating new converter! [6x]
    action -> OkCancelActions cancel
    It's now Sat Oct 5 23:07:59 2013
    next real activation is Sun Oct 6 17:15:01 2013
    [timer.py] next activation: 1381007379 (in 99781 ms)
    Traceback (most recent call last):
    File "/usr/lib/enigma2/python/mytest.py", line 280, in processDelay
    self.current_dialog.doClose()
    File "/usr/lib/enigma2/python/Screens/Screen.py", line 129, in doClose
    if val: # is not a duplicate...
    File "/usr/lib/enigma2/python/Components/MovieList.py", line 189, in __len__
    return len(self.list)
    AttributeError: 'MovieList' object has no attribute 'list'


    bzw.:


    Wie es dazu kam, wissen wir nicht mehr genau, aber das crash.log liest sich klingt wie der Versuch, die Anzeige der Liste der Aufnahmen abzubrechen, noch während sie langsam (bei 200 Aufnahmen) von der Platte geholt aud aufgebaut wird.


    MovieList.py:

    Code
    188       def __len__(self):
        189               return len(self.list)

    self.list wird aber erst in load zu [] initialisiert…


    Screens.py:reload

    Code
    124               # we can have multiple dict entries with different names but same Element
        125               # but we dont can call destroy multiple times
        126               for name in self.keys():
        127                       val = self[name]
        128                       del self[name] # remove from dict
        129                       if val: # is not a duplicate...
        133                                               self[n] = None # mark as duplicate


    Bei "if val:" klappert Python einige benutzerdefinierte Methoden ab, um auf True oder False zu kommen.


    Ein trivialer Fix wäre, self.list gleich in __init__ zu setzen, aber vielleicht sollte __len__ anders definiert oder das in Python kontroverse "Truth Value Testing" von "if val:" gänzlich vermieden werden? Der Kommentar "mark as duplicate" legt nahe, dass "if val is not None:" der korrekte Test :kissing_face: sein könnte. Oder soll irgendwelches Locking verhindern, dass Objekte zu früh abgebaut werden?


    Benutzte Plugins: FlashExpander, dazu noch von SqueezeOut inspiriertes manuelles Kopieren einiger dicker Dateien von /media/squashfs-images auf die SATA-Partition für /usr, die vom FlashExpander genutzt wird.


    Mein image ist nicht das neueste, aber ich habe im enigma2.git keine Korrektur in diesem Bereich gesehen.