Details
-
Bug
-
Resolution: Invalid
-
P1: Critical
-
None
-
5.3.2
-
None
Description
When using connman bearer backend:
[nemo@Jolla ~]$ ./dbus-crash
[D] Foo::foo:19 - Class: dbus connected
[D] QDBusPendingCallPrivate::QDBusPendingCallPrivate:107 - QDBusPendingCallPrivate::QDBusPendingCallPrivate(const QDBusMessage&, QDBusConnectionPrivate*) 0xfef388
[D] QDBusPendingCallPrivate::QDBusPendingCallPrivate:107 - QDBusPendingCallPrivate::QDBusPendingCallPrivate(const QDBusMessage&, QDBusConnectionPrivate*) 0xff15a0
[D] QDBusPendingCallPrivate::QDBusPendingCallPrivate:107 - QDBusPendingCallPrivate::QDBusPendingCallPrivate(const QDBusMessage&, QDBusConnectionPrivate*) 0x43f02548
[D] QDBusPendingCallPrivate::~QDBusPendingCallPrivate:136 - QDBusPendingCallPrivate::~QDBusPendingCallPrivate() 0x43f02548
[D] QDBusPendingCallPrivate::QDBusPendingCallPrivate:107 - QDBusPendingCallPrivate::QDBusPendingCallPrivate(const QDBusMessage&, QDBusConnectionPrivate*) 0x43f02508
[D] QDBusPendingCallPrivate::~QDBusPendingCallPrivate:136 - QDBusPendingCallPrivate::~QDBusPendingCallPrivate() 0x43f02508
[D] QDBusPendingCallPrivate::QDBusPendingCallPrivate:107 - QDBusPendingCallPrivate::QDBusPendingCallPrivate(const QDBusMessage&, QDBusConnectionPrivate*) 0x43f021c0
[D] QDBusPendingCallPrivate::~QDBusPendingCallPrivate:136 - QDBusPendingCallPrivate::~QDBusPendingCallPrivate() 0x43f021c0
[D] QDBusPendingCallPrivate::QDBusPendingCallPrivate:107 - QDBusPendingCallPrivate::QDBusPendingCallPrivate(const QDBusMessage&, QDBusConnectionPrivate*) 0x43f035f0
[D] QDBusPendingCallPrivate::~QDBusPendingCallPrivate:136 - QDBusPendingCallPrivate::~QDBusPendingCallPrivate() 0x43f035f0
[D] QDBusPendingCallPrivate::QDBusPendingCallPrivate:107 - QDBusPendingCallPrivate::QDBusPendingCallPrivate(const QDBusMessage&, QDBusConnectionPrivate*) 0x43f037a0
[D] QDBusPendingCallPrivate::QDBusPendingCallPrivate:107 - QDBusPendingCallPrivate::QDBusPendingCallPrivate(const QDBusMessage&, QDBusConnectionPrivate*) 0x43f04250
[D] QDBusPendingCallPrivate::~QDBusPendingCallPrivate:136 - QDBusPendingCallPrivate::~QDBusPendingCallPrivate() 0x43f04250
[D] QDBusPendingCallPrivate::QDBusPendingCallPrivate:107 - QDBusPendingCallPrivate::QDBusPendingCallPrivate(const QDBusMessage&, QDBusConnectionPrivate*) 0x43f06030
[D] QDBusPendingCallPrivate::QDBusPendingCallPrivate:107 - QDBusPendingCallPrivate::QDBusPendingCallPrivate(const QDBusMessage&, QDBusConnectionPrivate*) 0x43f07460
[D] QDBusPendingCallPrivate::~QDBusPendingCallPrivate:136 - QDBusPendingCallPrivate::~QDBusPendingCallPrivate() 0x43f07460
[D] QDBusPendingCallPrivate::QDBusPendingCallPrivate:107 - QDBusPendingCallPrivate::QDBusPendingCallPrivate(const QDBusMessage&, QDBusConnectionPrivate*) 0x43f06388
[D] QDBusPendingCallPrivate::~QDBusPendingCallPrivate:136 - QDBusPendingCallPrivate::~QDBusPendingCallPrivate() 0x43f06388
[D] Foo::foo:23 - Class: exiting
[D] Foo::quiting:28 - QUITING!!!!
virtual QDBusConnectionPrivate::~QDBusConnectionPrivate() QDBusConnectionPrivate(0xfe5590)
QDBusPendingCallPrivate::~QDBusPendingCallPrivate() 0xfef388
Segmentation fault (core dumped)
[nemo@Jolla ~]$
here is code to make this crash:
#include <QCoreApplication>
#include <QDBusConnection>
#include <QDBusVariant>
#include <QNetworkConfigurationManager>
#include <QTimer>
class Foo : public QObject
{
Q_OBJECT
public slots:
void foo()
};
int main(int argv, char **argc)
{
QCoreApplication app(argv, argc);
Foo foo;
QTimer::singleShot(0, &foo, SLOT(foo()));
return app.exec();
}
#include "main.moc"
00:30 <@w00t> so aiui what appears to be happening: bearer plugin creates an async call (with QStringLiteral data), it goes into QtDBus, application terminates (unloading connman bearer as first step, but does not destroy the pending call(s)), goes to unload qtdbus, which destroys the connection -> hits the dangling QStringLiteral pointer left after the bearer plugin unload