(Solved) Segmentation fault QMediaPlayer on exit



  • I have been struggling with a segmentation fault for quite a while and simply can't figure out where it comes from.
    I have a videoplayer using Qt5.1 on Ubuntu 12.04 and it works as such as expected, except when I exit my application I get a segmentation fault.
    In my main I have the following piece of code to exit my application
    @
    // Create a window to shut down the application
    QWidget window;
    QLabel *label = new QLabel("The video player application is running");
    QPushButton *button = new QPushButton("&Stop player");
    QObject::connect(button, SIGNAL(clicked()), &app, SLOT(quit()));
    QVBoxLayout *layout = new QVBoxLayout(&window);
    layout->addWidget(label);
    layout->addWidget(button);
    window.show();
    @
    And my videoplayer class looks like this:
    @
    #include <QMediaPlayer>
    #include <QVideoWidget>
    #include <QMediaPlaylist>

    class QMediaPlaylist;
    class QVideoWidget;

    namespace VideoModule
    {

    class VideoPlayerPlugin : public QObject, VideoPlayer
    {
    Q_OBJECT

    public:
    explicit VideoPlayerPlugin(QObject *parent = 0);

    bool selfTest() override;
    
    bool initialize() override;
    bool postInit() override;
    
    QStringList diagnosticInfo() const override;
    QObject *asQObject() override {return this;}
    
    void startPlaying() override;
    
    void stopPlaying() override;
    
    void pausePlayback() override;
    

    signals:
    void aboutToFinish();

    public slots:
    void setNextFile(const QString &file) override;
    void stopAndClear() override;

    private slots:
    void playerStateChanged(QMediaPlayer::State state);

    private:
    QMediaPlaylist *m_playlist;
    QMediaPlayer *m_player;
    QVideoWidget *m_video;
    bool m_canPlay;
    };
    @

    I have run gdb and the backtrace after getting the segmentation fault looks like this:
    @
    Program received signal SIGSEGV, Segmentation fault.
    0xb1393bf3 in QMediaPlayer::~QMediaPlayer() () from /xx/Qt5.1.1/5.1.1/gcc/lib/libQt5Multimedia.so.5
    (gdb) bt
    #0 0xb1393bf3 in QMediaPlayer::~QMediaPlayer() () from /xx/Qt5.1.1/5.1.1/gcc/lib/libQt5Multimedia.so.5
    #1 0xb1393c42 in QMediaPlayer::~QMediaPlayer() () from /xx/Qt5.1.1/5.1.1/gcc/lib/libQt5Multimedia.so.5
    #2 0xb777ad8c in QObjectPrivate::deleteChildren() () from /xx/Qt5.1.1/5.1.1/gcc/lib/libQt5Core.so.5
    #3 0xb778017b in QObject::~QObject() () from /xx/Qt5.1.1/5.1.1/gcc/lib/libQt5Core.so.5
    #4 0xb1419890 in VideoModule::VideoPlayerPlugin::~VideoPlayerPlugin (this=0x82ddf50, __in_chrg=<optimized out>)
    at ../../../MyPlayer/src/videoplayerplugin/videoplayerplugin.h:11
    #5 0xb14198d5 in VideoModule::VideoPlayerPlugin::~VideoPlayerPlugin (this=0x82ddf50, __in_chrg=<optimized out>)
    at ../../../MyPlayer/src/videoplayerplugin/videoplayerplugin.h:11
    #6 0xb7744168 in ?? () from /xx/Qt5.1.1/5.1.1/gcc/lib/libQt5Core.so.5
    #7 0xb77482c4 in ?? () from /xx/Qt5.1.1/5.1.1/gcc/lib/libQt5Core.so.5
    #8 0xb72702fb in __cxa_finalize (d=0xb7972440) at cxa_finalize.c:56
    #9 0xb755aec4 in ?? () from /xx/Qt5.1.1/5.1.1/gcc/lib/libQt5Core.so.5
    #10 0xb77f0c7d in _fini () from /xx/Qt5.1.1/5.1.1/gcc/lib/libQt5Core.so.5
    #11 0xb7ffeff4 in ?? () from /lib/ld-linux.so.2
    #12 0xb726ff51 in __run_exit_handlers (status=0, listp=0xb73e33e4, run_list_atexit=true) at exit.c:78
    #13 0xb726ffdd in __GI_exit (status=0) at exit.c:100
    #14 0xb72564db in __libc_start_main (main=0x804959c <main(int, char**)>, argc=1, ubp_av=0xbffff234,
    init=0x804a4d0 <__libc_csu_init>, fini=0x804a540 <__libc_csu_fini>, rtld_fini=0xb7fed280 <_dl_fini>,
    stack_end=0xbffff22c) at libc-start.c:258
    #15 0x080494d1 in _start ()
    @

    Can anyone give me a hint if I might be missing something or what else I could be doing wrong?

    EDIT: Found out the destructor tried to delete the same object twice...


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.