VDR 2.3.8 LOCK Sequenz

  • Hallo zusammen,


    nun hab' ich da noch einen Locking Fehler im skinnopacity (Channel-Info):


    Die gibt es ja entsprechend in anderen Plugins, die Timer-Infos mit anzeigen.


    Nun hat der VDR bereits "Channels" gelockt:


    Das kann man im Plugin


    ja nicht mehr "umdrehen". Was tun? In menu.c "Timers" mit locken?


    Stefan

  • Hallo zusammen,


    Versuch macht kluch...



    Und das Syslog ist derzeit ruhig. Vielleicht nicht die beste Lösung, aber mal sehen, ob was verunfallt.
    :-)


    Grüße,
    Stefan

  • Aus skins.h:


    // Several member functions of the following classes are called with a pointer to
    // an object from a global list (cTimer, cChannel, cRecording or cEvent). In these
    // cases the core VDR code holds a lock on the respective list. While in general a
    // plugin should only work with the objects and data that is explicitly given to it
    // in the function call, the called function may itself set a read lock (not a write
    // lock!) on this list, because read locks can be nested. It may also set read locks
    // (not write locks!) on higher order lists.
    // For instance, a function that is called with a cChannel may lock cRecordings and/or
    // cSchedules (which contains cEvent objects), but not cTimers. If a plugin needs to
    // set locks of its own (on mutexes defined inside the plugin code), it shall do so
    // after setting any locks on VDR's global lists, and it shall always set these
    // locks in the same sequence, to avoid deadlocks.


    Der Patch ist also bestenfalls ein Workaround, aber keine Lösung (und wird natürlich keinen Eingang in die VDR-Source finden ;-).


    Wenn cNopacityDisplayChannelView Timer anzeigen will, dann sollte es das in seiner Flush()-Funktion tun (siehe cSkinLCARSDisplayChannel::Flush()) oder in einem separaten Thread.


    Klaus