rodlie / qtfm

Qt File Manager
https://qtfm.eu
GNU General Public License v2.0
158 stars 46 forks source link

Segfault if UDisks not running(?) #73

Closed PrinceKael closed 5 years ago

PrinceKael commented 6 years ago

Apologies for the title, I'm new to Github and had no idea how to describe this.

After a fresh install of qtfm on Void Linux, I can open qtfm however after a short amount of time ranging from 10 seconds to 2 minutes the program crashes and displays the following error in terminal:

QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-princekael' ((null):0, (null)) Segmentation fault

This happened yesterday before I re-installed it to no avail, and I couldn't recall it being associated with the same behaviour. Perhaps this is due to my set-up or something?

rodlie commented 6 years ago

This is probably a problem with D-Bus/Udisks. qtfm will scan for devices ~10 secs after launch. If you don't have D-Bus/UDisks it seems qtfm will crash.

I think I know where the problem is, and I will fix it as soon as possible.

XDG_RUNTIME_DIR can be ignored.

You can rebuild with CONFIG+=no_udisks to disable UDisks for now if you want.

rodlie commented 6 years ago

Issue should be fixed, please check the 6.1 branch if possible.

git clone https://github.com/rodlie/qtfm
cd qtfm
git checkout 6.1

or download a source snapshot: https://github.com/rodlie/qtfm/archive/6.1.tar.gz

PrinceKael commented 5 years ago

Sorry for the late reply - had some personal matters and forgot about this issue.

I had some issues with make - after extracting it and using qmake a la once I did this:

tar xvf qtfm-6.1.tar.gz
cd qtfm-6.1
mkdir build && cd build
qmake CONFIG+=release ..

I got this:

cd libfm/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /home/princekael/qtfm-6.1/libfm/libfm.pro CONFIG+=release ) && make -f Makefile 
make[1]: Entering directory '/home/princekael/qtfm-6.1/build/libfm'
g++ -c -pipe -O2 -fPIC -Wall -W -D_REENTRANT -DQT_NO_DEBUG_OUTPUT -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_DBUS_LIB -DQT_CORE_LIB -I../../libfm -I. -I /usr/include/qt5 -I /usr/include/qt5/QtWidgets -I /usr/include/qt5/QtGui -I /usr/include/qt5/QtDBus -I /usr/include/qt5/QtCore -I. -I /usr/include/libdrm -I/usr/lib/qt5/mkspecs/linux-g++ -o desktopfile.o ../../libfm/desktopfile.cpp
In file included from ../../libfm/desktopfile.cpp:1:
../../libfm/desktopfile.h:4:10: fatal error: QStringList: No such file or directory
 #include <QStringList>
          ^~~~~~~~~~~~~
compilation terminated.
make[1]: *** [Makefile:427: desktopfile.o] Error 1
make[1]: Leaving directory '/home/princekael/qtfm-6.1/build/libfm'
make: *** [Makefile:48: sub-libfm-make_first] Error 2

The only saving grace is, my main qtfm install hasn't crashed at all lately - perhaps an update that I missed. Although I still get: XDG_RUNTIME_DIR not set, but no crashing.

rodlie commented 5 years ago

No problem, been busy with other projects this month (and my internet connections is currently very unstable).

There are currently two issues in qtfm that needs to be fixed:

I will start working on qtfm again this week. I will delay development of 6.2 to get 6.1 more stable.

rodlie commented 5 years ago

I think most segfault are fixed (will push commits to 6.1 later today). If you still have issues after 6.1.4 is released feel free to re-open this issue.

crtxcr commented 5 years ago

I still have issues with the current master

(gdb) where
#0  0x00007fd8bfed2380 in QDBusAbstractInterface::isValid() const () from /usr/lib64/libQt5DBus.so.5
#1  0x00007fd8c12ee7df in Disks::checkUDisks (this=0x55ac5a17c6c0) at disks.cpp:207
#2  0x00007fd8c12f9df2 in Disks::qt_static_metacall (_o=0x55ac5a17c6c0, _c=QMetaObject::InvokeMetaMethod, _id=13, _a=0x7ffd8f5a3e10) at ../lib/.moc_libfm/moc_disks.cpp:342
#3  0x00007fd8bf9d0a1b in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib64/libQt5Core.so.5
#4  0x00007fd8bf9dc327 in QTimer::timeout(QTimer::QPrivateSignal) () from /usr/lib64/libQt5Core.so.5
#5  0x00007fd8bf9d163b in QObject::event(QEvent*) () from /usr/lib64/libQt5Core.so.5
#6  0x00007fd8c0b6bf11 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
#7  0x00007fd8c0b73580 in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
#8  0x00007fd8bf9a9591 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5
#9  0x00007fd8bf9f73e9 in QTimerInfoList::activateTimers() () from /usr/lib64/libQt5Core.so.5
#10 0x00007fd8bf9f7c44 in ?? () from /usr/lib64/libQt5Core.so.5
#11 0x00007fd8bd29eccd in g_main_context_dispatch () from /usr/lib64/libglib-2.0.so.0
#12 0x00007fd8bd29ef68 in ?? () from /usr/lib64/libglib-2.0.so.0
#13 0x00007fd8bd29effc in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
#14 0x00007fd8bf9f80a3 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/libQt5Core.so.5
#15 0x00007fd8b97745d1 in ?? () from /usr/lib64/libQt5XcbQpa.so.5
#16 0x00007fd8bf9a8563 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/libQt5Core.so.5
#17 0x00007fd8bf9b0392 in QCoreApplication::exec() () from /usr/lib64/libQt5Core.so.5
#18 0x000055ac582ad180 in main (argc=1, argv=0x7ffd8f5a4838) at src/main.cpp:93
(gdb) frame 1
#1  0x00007fd8c12ee7df in Disks::checkUDisks (this=0x55ac5a17c6c0) at disks.cpp:207
207     if (dbus->isValid()) { scanDevices(); }
(gdb) print dbus
$1 = (QDBusInterface *) 0x0

The dbus variable somehow is a null-pointer and thus the SEGFAULT.

void Disks::setupDBus()
{
    QDBusConnection system = QDBusConnection::systemBus();
    if (system.isConnected()) {

perhaps it should be if (!system.isConnected()) {?

But in general, it seems this file does not honor CONFIG+=no_dbus.

rodlie commented 5 years ago

Will fix sometime this weekend.

Regarding CONFIG+=no_dbus I did some changes in master so it might be ignored somewhere. Anyway, it should not crash...

rodlie commented 5 years ago

I tested CONFIG+=no_dbus in master and it works as intended, no D-Bus code is built or run.

I will backport the segfault fix to 6.1 and do a quick last release (6.1.8) for that branch tomorrow.