[gelöst] yavdr jammy epg2vdr segfault bei "vdr --version"

  • seahawk1986

    ich habe ein seltsames Problem: Mein Test VDR unter Ubuntu 22.04 mit vdr aus deinem Jammy Respository crashed beim Aufruf von "vdr --version". Nur da, sonst läuft er.

    Ich konnte es eingrenzen auf das epg2vdr Plugin. Der Fehler ist weg, wenn ich es aus deinen Sourcen neu baue. Ist da was beim Build schief gegangen ???

    VDR

    The post was edited 1 time, last by kfb77 ().

  • Ist da was beim Build schief gegangen ???

    Soweit ich das bislang nachvollziehen konnte, setzt Launchpad ein paar zusätzliche Compiler-Flags: -Werror=format-security -Wformat -ffat-lto-objects -flto=auto -fstack-protector-strong - ich bekomme den Segfault auch mit einem lokal kompilierten Plugin, wenn ich die CXXFLAGS um -ffat-lto-objects -flto=auto erweitere.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Kann es sein, dass das ein Problem des VDR ist, weil der in http://git.tvdr.de/?p=vdr.git;…e52794c6ba52;hb=HEAD#l549 ff. die Plugins lädt, aber danach nicht aufräumt, bevor er sich beendet, wenn man vdr --version aufruft?


    Ich habe mal versuchsweise folgendes eingebaut und damit scheint der Segfault weg zu sein:

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • In der PLUGIN.html, die dem VDR beiliegt, steht im Abschnitt "Construction and Destruction":

    The constructor shall initialize any member variables the plugin defines, but must not access any global structures of VDR. It also must not create any threads or other large data structures. These things are done in the Initialize() or Start() function later. Constructing a plugin object shall not have any side effects or produce any output, since VDR, for instance, has to create the plugin objects in order to get their command line help - and after that immediately destroys them again.

    Damit wäre es epg2vdr, das sich falsch verhält, weil es seinen EpgHandler statt in https://projects.vdr-developer…dr.git/tree/epg2vdr.c#n28 nicht erst im Rahmen der Initialize()-Methode registriert...

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Eigentlich wird das "getSingleton" erst in Initialize aufgerufen. Es sei denn, es versteckt sich irgendwie in einem Call-Stack...

  • Eigentlich wird das "getSingleton" erst in Initialize aufgerufen. Es sei denn, es versteckt sich irgendwie in einem Call-Stack...

    Mittlerweile schon - ich hatte horchi deswegen angeschrieben: https://projects.vdr-developer…2c31b901968bb738a4b319326

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Da sieht man mal, welchen Vorteil gute Dokumentation - wie hier - bringt. :)

  • kfb77 die neue Version wurde mittlerweile (momentan dauern Builds für x64 leider ziemlich lange) von Launchpad veröffentlicht - probier mal bitte, ob das das Problem löst.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)