Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-69440

QQuickStylePlugin crashes when calling qmlClearTypeRegistrations

    XMLWordPrintable

    Details

    • Commits:
      9478053838ae2d950b162c2b93a2a400c82d9bf7

      Description

      Hello, I was trying to restart a qml application to apply a style change to quickcontrols2. Calling qmlClearTypeRegistrations results in a crash most of times:

      (gdb) backtrace
      #0  0x0000000000000045 in ?? ()
      #1  0x00007ffff7bc694b in QScopedPointerDeleter<QQuickProxyTheme>::cleanup (pointer=<optimized out>) at /usr/include/qt5/QtCore/qscopedpointer.h:52
      #2  QScopedPointer<QQuickProxyTheme, QScopedPointerDeleter<QQuickProxyTheme> >::~QScopedPointer (this=0x7fffbc02d1f8, __in_chrg=<optimized out>) at /usr/include/qt5/QtCore/qscopedpointer.h:107
      #3  QQuickStylePlugin::~QQuickStylePlugin (this=0x7fffbc02d1e0, __in_chrg=<optimized out>) at qquickstyleplugin.cpp:49
      #4  0x00007fffd6de3845 in QtQuickControls2Plugin::~QtQuickControls2Plugin (this=0x7fffbc02d1e0, __in_chrg=<optimized out>) at qtquickcontrols2plugin.cpp:95
      #5  QtQuickControls2Plugin::~QtQuickControls2Plugin (this=0x7fffbc02d1e0, __in_chrg=<optimized out>) at qtquickcontrols2plugin.cpp:96
      #6  0x00007ffff5736a66 in QLibraryPrivate::unload(QLibraryPrivate::UnloadFlag) () at /usr/include/c++/8/bits/atomic_base.h:390
      #7  0x00007ffff572b15b in QPluginLoader::unload (this=0x7fffbc001f40) at plugin/qpluginloader.cpp:263
      #8  0x00007ffff61e33e1 in ?? () from /usr/lib64/libQt5Qml.so.5
      #9  0x00007ffff61905b9 in qmlClearTypeRegistrations() () from /usr/lib64/libQt5Qml.so.5
      #10 0x000000000040116a in main (argc=1, argv=0x7fffffffdb68) at ../../StyleBug/main.cpp:10
      

      Example code:

      main.cpp
      #include <QApplication>
      #include <QQmlApplicationEngine>
      #include <QQuickStyle>
      
      int main(int argc, char *argv[])
      {
          int res;
          int style = -1;
          do {
              qmlClearTypeRegistrations();
              QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
      
              QApplication app(argc, argv);
      
              if (style != -1)
                  QQuickStyle::setStyle(QQuickStyle::availableStyles()[style]);
      
              QQmlApplicationEngine engine;
              engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
              if (engine.rootObjects().isEmpty())
                  return -1;
      
              res = app.exec();
              style += res;
          } while (res > 0);
          return res;
      }
      
      main.qml
      import QtQuick 2.9
      import QtQuick.Controls 2.2
      
      ApplicationWindow {
          visible: true
          width: 640
          height: 480
          title: qsTr("Hello World")
          Button {
              text: "Change Style"
              onClicked: Qt.exit(1);
          }
      }
      

      Note that qmlClearTypeRegistrations() doesn't crash when changing from org.style.desktop to another style (or itself) and the application successfully restarts.

        Attachments

          Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            Activity

              People

              • Assignee:
                qt.team.quick.subscriptions Qt Quick and Widgets Team
                Reporter:
                raffarti Raffaele Pertile
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Gerrit Reviews

                  There are no open Gerrit changes