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

Processing events within QtQuick.Controls menu item 'triggered' signal causes crash

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • P1: Critical
    • 5.6.0 RC
    • 5.4.0, 5.5.0, 5.5.1
    • Quick: Controls 1
    • None
    • Windows 7 x64 SP1
      Qt 5.5.0 (msvc2013, official package), also reproduced on current 5.5.1 branch from sept 18th and on 5.4.0.
    • b27a01a86e614207025e569926d0c419857e8965

    Description

      It appears that processing events in a signal handler attached to the 'triggered()' signal of a QtQuick.Controls MenuItem will cause a crash. This corresponds to the following snippet:

      ...
      MenuItem {
      	text: "Will crash"
      	onTriggered: {
      		someObj.showSomeModalDialog(); // <-- Will crash here
      	}
      }
      ...
      

      I've attached a minimal example that shows the crash. IT calls QFileDialog::getOpenFileName() from a MenuItem's triggered signal. Here is the stack trace of the crash in this example:

      >	Qt5Cored.dll!qt_message_fatal(QtMsgType __formal, const QMessageLogContext & context, const QString & message) Line 1571	C++
       	Qt5Cored.dll!QMessageLogger::fatal(const char * msg, ...) Line 781	C++
       	Qt5Cored.dll!qt_assert(const char * assertion, const char * file, int line) Line 2967	C++
       	Qt5Qmld.dll!QQmlBoundSignalExpression::function() Line 183	C++
       	Qt5Qmld.dll!QQmlBoundSignalExpression::sourceLocation() Line 155	C++
       	Qt5Qmld.dll!QQmlData::destroyed(QObject * object) Line 1710	C++
       	Qt5Qmld.dll!QQmlData::destroyed(QAbstractDeclarativeData * d, QObject * o) Line 675	C++
       	Qt5Cored.dll!QObject::~QObject() Line 918	C++
       	Qt5Quickd.dll!QQuickItem::~QQuickItem() Line 2289	C++
       	Qt5Quickd.dll!QQmlPrivate::QQmlElement<QQuickItem>::~QQmlElement<QQuickItem>() Line 98	C++
       	Qt5Quickd.dll!QQmlPrivate::QQmlElement<QQuickItem>::`scalar deleting destructor'(unsigned int)	C++
       	Qt5Cored.dll!QObjectPrivate::deleteChildren() Line 1950	C++
       	Qt5Cored.dll!QObject::~QObject() Line 1027	C++
       	Qt5Quickd.dll!QQuickItem::~QQuickItem() Line 2289	C++
       	Qt5Quickd.dll!QQuickImplicitSizeItem::~QQuickImplicitSizeItem()	C++
       	Qt5Quickd.dll!QQuickLoader::~QQuickLoader() Line 302	C++
       	Qt5Quickd.dll!QQmlPrivate::QQmlElement<QQuickLoader>::~QQmlElement<QQuickLoader>() Line 98	C++
       	Qt5Quickd.dll!QQmlPrivate::QQmlElement<QQuickLoader>::`scalar deleting destructor'(unsigned int)	C++
       	Qt5Cored.dll!qDeleteInEventHandler(QObject * o) Line 4459	C++
       	Qt5Cored.dll!QObject::event(QEvent * e) Line 1235	C++
       	Qt5Quickd.dll!QQuickItem::event(QEvent * ev) Line 7317	C++
       	Qt5Widgetsd.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3719	C++
       	Qt5Widgetsd.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3160	C++
       	Qt5Cored.dll!QCoreApplication::notifyInternal(QObject * receiver, QEvent * event) Line 965	C++
       	Qt5Cored.dll!QCoreApplication::sendEvent(QObject * receiver, QEvent * event) Line 224	C++
       	Qt5Cored.dll!QCoreApplicationPrivate::sendPostedEvents(QObject * receiver, int event_type, QThreadData * data) Line 1593	C++
       	Qt5Cored.dll!QEventDispatcherWin32::sendPostedEvents() Line 1242	C++
       	qwindowsd.dll!QWindowsGuiEventDispatcher::sendPostedEvents() Line 84	C++
       	Qt5Cored.dll!qt_internal_proc(HWND__ * hwnd, unsigned int message, unsigned __int64 wp, __int64 lp) Line 416	C++
       	user32.dll!UserCallWinProcCheckWow()	Unknown
       	user32.dll!DispatchMessageWorker()	Unknown
       	shell32.dll!SHProcessMessagesUntilEventsEx()	Unknown
       	shell32.dll!CDefView::_SetItemCollection(struct IItemCollection *,unsigned int,enum UPDATE_FLAGS,class CEventResult *)	Unknown
       	shell32.dll!CDefView::_CreateNewCollection(enum UPDATE_FLAGS,int,enum FILTER_OPERATION_FLAGS)	Unknown
       	shell32.dll!CDefView::CreateViewWindow3(struct IShellBrowser *,struct IShellView *,unsigned long,enum FOLDERFLAGS,enum FOLDERFLAGS,enum FOLDERVIEWMODE,struct _GUID const *,struct tagRECT const *,struct HWND__ * *)	Unknown
       	shell32.dll!CExplorerBrowser::_CreateViewWindow(struct tagRECT const *,struct HWND__ * *)	Unknown
       	shell32.dll!CExplorerBrowser::_SwitchView(struct IShellFolder *,struct _ITEMIDLIST_ABSOLUTE const *,int)	Unknown
       	shell32.dll!CExplorerBrowser::_BrowseToView(struct _ITEMIDLIST_ABSOLUTE const *,int)	Unknown
       	shell32.dll!CExplorerBrowser::_BrowseObjectInternal(struct _ITEMIDLIST_RELATIVE const *,unsigned int)	Unknown
       	shell32.dll!CExplorerBrowser::_OnBrowseObject(void)	Unknown
       	shell32.dll!CExplorerBrowser::BrowseObject(struct _ITEMIDLIST_RELATIVE const *,unsigned int)	Unknown
       	comdlg32.dll!CFileOpenSave::_BrowseObject(struct _ITEMIDLIST_RELATIVE const *,unsigned int)	Unknown
       	comdlg32.dll!CFileOpenSave::_JumpToInitialLocation(void)	Unknown
       	comdlg32.dll!CFileOpenSave::_InitOpenSaveDialog(struct HWND__ *)	Unknown
       	comdlg32.dll!CFileOpenSave::s_OpenSaveDlgProc(struct HWND__ *,unsigned int,unsigned __int64,__int64)	Unknown
       	user32.dll!UserCallDlgProcCheckWow()	Unknown
       	user32.dll!DefDlgProcWorker()	Unknown
       	user32.dll!DefDlgProcW()	Unknown
       	user32.dll!UserCallWinProcCheckWow()	Unknown
       	user32.dll!DispatchClientMessage()	Unknown
       	user32.dll!__fnDWORD()	Unknown
       	ntdll.dll!KiUserCallbackDispatcherContinue()	Unknown
       	user32.dll!ZwUserMessageCall()	Unknown
       	user32.dll!InternalCreateDialog()	Unknown
       	user32.dll!InternalDialogBox()	Unknown
       	user32.dll!DialogBoxIndirectParamAorW()	Unknown
       	user32.dll!DialogBoxIndirectParamW()	Unknown
       	comdlg32.dll!CFileOpenSave::Show(struct HWND__ *)	Unknown
       	qwindowsd.dll!QWindowsNativeFileDialogBase::doExec(HWND__ * owner) Line 1058	C++
       	qwindowsd.dll!QWindowsNativeDialogBase::exec(HWND__ * owner) Line 462	C++
       	qwindowsd.dll!QWindowsDialogHelperBase<QPlatformFileDialogHelper>::exec() Line 685	C++
       	Qt5Widgetsd.dll!QDialog::exec() Line 538	C++
       	Qt5Widgetsd.dll!QFileDialog::getOpenFileUrl(QWidget * parent, const QString & caption, const QUrl & dir, const QString & filter, QString * selectedFilter, QFlags<enum QFileDialog::Option> options, const QStringList & supportedSchemes) Line 2124	C++
       	Qt5Widgetsd.dll!QFileDialog::getOpenFileName(QWidget * parent, const QString & caption, const QString & dir, const QString & filter, QString * selectedFilter, QFlags<enum QFileDialog::Option> options) Line 2071	C++
       	nestedlooptest.exe!Test::getOpenFileName() Line 25	C++
       	nestedlooptest.exe!Test::qt_static_metacall(QObject * _o, QMetaObject::Call _c, int _id, void * * _a) Line 69	C++
       	nestedlooptest.exe!Test::qt_metacall(QMetaObject::Call _c, int _id, void * * _a) Line 102	C++
       	Qt5Cored.dll!QMetaObject::metacall(QObject * object, QMetaObject::Call cl, int idx, void * * argv) Line 297	C++
       	Qt5Qmld.dll!QQmlObjectOrGadget::metacall(QMetaObject::Call type, int index, void * * argv) Line 1690	C++
       	Qt5Qmld.dll!CallMethod(const QQmlObjectOrGadget & object, int index, int returnType, int argCount, int * argTypes, QV4::ExecutionEngine * engine, QV4::CallData * callArgs) Line 1168	C++
       	Qt5Qmld.dll!CallPrecise(const QQmlObjectOrGadget & object, const QQmlPropertyData & data, QV4::ExecutionEngine * engine, QV4::CallData * callArgs) Line 1408	C++
       	Qt5Qmld.dll!QV4::QObjectMethod::callInternal(QV4::CallData * callData) Line 1893	C++
       	Qt5Qmld.dll!QV4::QObjectMethod::call(QV4::Managed * m, QV4::CallData * callData) Line 1829	C++
       	Qt5Qmld.dll!QV4::Object::call(QV4::CallData * d) Line 305	C++
       	Qt5Qmld.dll!QV4::Runtime::callProperty(QV4::ExecutionEngine * engine, int nameIndex, QV4::CallData * callData) Line 977	C++
       	Qt5Qmld.dll!QV4::Moth::VME::run(QV4::ExecutionEngine * engine, const unsigned char * code) Line 556	C++
       	Qt5Qmld.dll!QV4::Moth::VME::exec(QV4::ExecutionEngine * engine, const unsigned char * code) Line 925	C++
       	Qt5Qmld.dll!QV4::SimpleScriptFunction::call(QV4::Managed * that, QV4::CallData * callData) Line 564	C++
       	Qt5Qmld.dll!QV4::Object::call(QV4::CallData * d) Line 305	C++
       	Qt5Qmld.dll!QQmlJavaScriptExpression::evaluate(QQmlContextData * context, const QV4::Value & function, QV4::CallData * callData, bool * isUndefined) Line 158	C++
       	Qt5Qmld.dll!QQmlBoundSignalExpression::evaluate(void * * a) Line 282	C++
       	Qt5Qmld.dll!QQmlBoundSignal_callback(QQmlNotifierEndpoint * e, void * * a) Line 409	C++
       	Qt5Qmld.dll!QQmlNotifier::emitNotify(QQmlNotifierEndpoint * endpoint, void * * a) Line 96	C++
       	Qt5Qmld.dll!QQmlData::signalEmitted(QAbstractDeclarativeData * __formal, QObject * object, int index, void * * a) Line 765	C++
       	Qt5Cored.dll!QMetaObject::activate(QObject * sender, int signalOffset, int local_signal_index, void * * argv) Line 3605	C++
       	Qt5Cored.dll!QMetaObject::activate(QObject * sender, const QMetaObject * m, int local_signal_index, void * * argv) Line 3583	C++
       	qtquickcontrolsplugind.dll!QQuickMenuItem::triggered() Line 836	C++
       	qtquickcontrolsplugind.dll!QQuickMenuItem::qt_static_metacall(QObject * _o, QMetaObject::Call _c, int _id, void * * _a) Line 686	C++
       	Qt5Cored.dll!QMetaObject::activate(QObject * sender, int signalOffset, int local_signal_index, void * * argv) Line 3719	C++
       	Qt5Cored.dll!QMetaObject::activate(QObject * sender, const QMetaObject * m, int local_signal_index, void * * argv) Line 3583	C++
       	qtquickcontrolsplugind.dll!QQuickAction::triggered(QObject * _t1) Line 351	C++
       	qtquickcontrolsplugind.dll!QQuickAction::trigger(QObject * source) Line 445	C++
       	qtquickcontrolsplugind.dll!QQuickMenuItem::trigger() Line 678	C++
       	qtquickcontrolsplugind.dll!QQuickMenuItem::qt_static_metacall(QObject * _o, QMetaObject::Call _c, int _id, void * * _a) Line 693	C++
       	qtquickcontrolsplugind.dll!QQuickMenuItem::qt_metacall(QMetaObject::Call _c, int _id, void * * _a) Line 806	C++
       	Qt5Cored.dll!QMetaObject::metacall(QObject * object, QMetaObject::Call cl, int idx, void * * argv) Line 297	C++
       	Qt5Qmld.dll!QQmlObjectOrGadget::metacall(QMetaObject::Call type, int index, void * * argv) Line 1690	C++
       	Qt5Qmld.dll!CallMethod(const QQmlObjectOrGadget & object, int index, int returnType, int argCount, int * argTypes, QV4::ExecutionEngine * engine, QV4::CallData * callArgs) Line 1174	C++
       	Qt5Qmld.dll!CallPrecise(const QQmlObjectOrGadget & object, const QQmlPropertyData & data, QV4::ExecutionEngine * engine, QV4::CallData * callArgs) Line 1408	C++
       	Qt5Qmld.dll!QV4::QObjectMethod::callInternal(QV4::CallData * callData) Line 1893	C++
       	Qt5Qmld.dll!QV4::QObjectMethod::call(QV4::Managed * m, QV4::CallData * callData) Line 1829	C++
       	Qt5Qmld.dll!QV4::Object::call(QV4::CallData * d) Line 305	C++
       	Qt5Qmld.dll!QV4::Runtime::callProperty(QV4::ExecutionEngine * engine, int nameIndex, QV4::CallData * callData) Line 977	C++
       	Qt5Qmld.dll!QV4::Moth::VME::run(QV4::ExecutionEngine * engine, const unsigned char * code) Line 556	C++
       	Qt5Qmld.dll!QV4::Moth::VME::exec(QV4::ExecutionEngine * engine, const unsigned char * code) Line 925	C++
       	Qt5Qmld.dll!QV4::SimpleScriptFunction::call(QV4::Managed * that, QV4::CallData * callData) Line 564	C++
       	Qt5Qmld.dll!QV4::Object::call(QV4::CallData * d) Line 305	C++
       	Qt5Qmld.dll!QV4::Runtime::callProperty(QV4::ExecutionEngine * engine, int nameIndex, QV4::CallData * callData) Line 977	C++
       	Qt5Qmld.dll!QV4::Moth::VME::run(QV4::ExecutionEngine * engine, const unsigned char * code) Line 556	C++
       	Qt5Qmld.dll!QV4::Moth::VME::exec(QV4::ExecutionEngine * engine, const unsigned char * code) Line 925	C++
       	Qt5Qmld.dll!QV4::SimpleScriptFunction::call(QV4::Managed * that, QV4::CallData * callData) Line 564	C++
       	Qt5Qmld.dll!QV4::Object::call(QV4::CallData * d) Line 305	C++
       	Qt5Qmld.dll!QQmlJavaScriptExpression::evaluate(QQmlContextData * context, const QV4::Value & function, QV4::CallData * callData, bool * isUndefined) Line 158	C++
       	Qt5Qmld.dll!QQmlBoundSignalExpression::evaluate(void * * a) Line 282	C++
       	Qt5Qmld.dll!QQmlBoundSignal_callback(QQmlNotifierEndpoint * e, void * * a) Line 409	C++
       	Qt5Qmld.dll!QQmlNotifier::emitNotify(QQmlNotifierEndpoint * endpoint, void * * a) Line 96	C++
       	Qt5Qmld.dll!QQmlData::signalEmitted(QAbstractDeclarativeData * __formal, QObject * object, int index, void * * a) Line 765	C++
       	Qt5Cored.dll!QMetaObject::activate(QObject * sender, int signalOffset, int local_signal_index, void * * argv) Line 3605	C++
       	Qt5Qmld.dll!QQmlVMEMetaObject::activate(QObject * object, int index, void * * args) Line 1326	C++
       	Qt5Qmld.dll!QQmlVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void * * a) Line 915	C++
       	Qt5Cored.dll!QAbstractDynamicMetaObject::metaCall(QObject * __formal, QMetaObject::Call c, int _id, void * * a) Line 421	C++
       	Qt5Cored.dll!QMetaObject::metacall(QObject * object, QMetaObject::Call cl, int idx, void * * argv) Line 294	C++
       	Qt5Qmld.dll!QQmlObjectOrGadget::metacall(QMetaObject::Call type, int index, void * * argv) Line 1690	C++
       	Qt5Qmld.dll!CallMethod(const QQmlObjectOrGadget & object, int index, int returnType, int argCount, int * argTypes, QV4::ExecutionEngine * engine, QV4::CallData * callArgs) Line 1157	C++
       	Qt5Qmld.dll!CallPrecise(const QQmlObjectOrGadget & object, const QQmlPropertyData & data, QV4::ExecutionEngine * engine, QV4::CallData * callArgs) Line 1404	C++
       	Qt5Qmld.dll!QV4::QObjectMethod::callInternal(QV4::CallData * callData) Line 1893	C++
       	Qt5Qmld.dll!QV4::QObjectMethod::call(QV4::Managed * m, QV4::CallData * callData) Line 1829	C++
       	Qt5Qmld.dll!QV4::Object::call(QV4::CallData * d) Line 305	C++
       	Qt5Qmld.dll!QV4::Runtime::callProperty(QV4::ExecutionEngine * engine, int nameIndex, QV4::CallData * callData) Line 977	C++
       	Qt5Qmld.dll!QV4::Moth::VME::run(QV4::ExecutionEngine * engine, const unsigned char * code) Line 556	C++
       	Qt5Qmld.dll!QV4::Moth::VME::exec(QV4::ExecutionEngine * engine, const unsigned char * code) Line 925	C++
       	Qt5Qmld.dll!QV4::SimpleScriptFunction::call(QV4::Managed * that, QV4::CallData * callData) Line 564	C++
       	Qt5Qmld.dll!QV4::Object::call(QV4::CallData * d) Line 305	C++
       	Qt5Qmld.dll!QQmlJavaScriptExpression::evaluate(QQmlContextData * context, const QV4::Value & function, QV4::CallData * callData, bool * isUndefined) Line 158	C++
       	Qt5Qmld.dll!QQmlBoundSignalExpression::evaluate(void * * a) Line 282	C++
       	Qt5Qmld.dll!QQmlBoundSignal_callback(QQmlNotifierEndpoint * e, void * * a) Line 409	C++
       	Qt5Qmld.dll!QQmlNotifier::emitNotify(QQmlNotifierEndpoint * endpoint, void * * a) Line 96	C++
       	Qt5Qmld.dll!QQmlData::signalEmitted(QAbstractDeclarativeData * __formal, QObject * object, int index, void * * a) Line 765	C++
       	Qt5Cored.dll!QMetaObject::activate(QObject * sender, int signalOffset, int local_signal_index, void * * argv) Line 3605	C++
       	Qt5Cored.dll!QMetaObject::activate(QObject * sender, const QMetaObject * m, int local_signal_index, void * * argv) Line 3583	C++
       	Qt5Quickd.dll!QQuickMouseArea::released(QQuickMouseEvent * _t1) Line 611	C++
       	Qt5Quickd.dll!QQuickMouseArea::setPressed(Qt::MouseButton button, bool p) Line 1185	C++
       	Qt5Quickd.dll!QQuickMouseArea::mouseReleaseEvent(QMouseEvent * event) Line 775	C++
       	Qt5Quickd.dll!QQuickItem::event(QEvent * ev) Line 7290	C++
       	Qt5Widgetsd.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3719	C++
       	Qt5Widgetsd.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3160	C++
       	Qt5Cored.dll!QCoreApplication::notifyInternal(QObject * receiver, QEvent * event) Line 965	C++
       	Qt5Cored.dll!QCoreApplication::sendEvent(QObject * receiver, QEvent * event) Line 224	C++
       	Qt5Quickd.dll!QQuickWindow::sendEvent(QQuickItem * item, QEvent * e) Line 2610	C++
       	Qt5Quickd.dll!QQuickWindowPrivate::deliverMouseEvent(QMouseEvent * event) Line 1533	C++
       	Qt5Quickd.dll!QQuickWindow::mouseReleaseEvent(QMouseEvent * event) Line 1573	C++
       	qtquickcontrolsplugind.dll!QQuickPopupWindow::mouseReleaseEvent(QMouseEvent * e) Line 173	C++
       	Qt5Guid.dll!QWindow::event(QEvent * ev) Line 1967	C++
       	Qt5Quickd.dll!QQuickWindow::event(QEvent * e) Line 1414	C++
       	qtquickcontrolsplugind.dll!QQuickPopupWindow::event(QEvent * event) Line 249	C++
       	Qt5Widgetsd.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3719	C++
       	Qt5Widgetsd.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3160	C++
       	Qt5Cored.dll!QCoreApplication::notifyInternal(QObject * receiver, QEvent * event) Line 965	C++
       	Qt5Cored.dll!QCoreApplication::sendSpontaneousEvent(QObject * receiver, QEvent * event) Line 227	C++
       	Qt5Guid.dll!QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent * e) Line 1792	C++
       	Qt5Guid.dll!QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent * e) Line 1582	C++
       	Qt5Guid.dll!QWindowSystemInterface::sendWindowSystemEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 626	C++
       	qwindowsd.dll!QWindowsGuiEventDispatcher::sendPostedEvents() Line 85	C++
       	Qt5Cored.dll!qt_internal_proc(HWND__ * hwnd, unsigned int message, unsigned __int64 wp, __int64 lp) Line 416	C++
       	user32.dll!UserCallWinProcCheckWow()	Unknown
       	user32.dll!DispatchMessageWorker()	Unknown
       	Qt5Cored.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 818	C++
       	qwindowsd.dll!QWindowsGuiEventDispatcher::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 74	C++
       	Qt5Cored.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 129	C++
       	Qt5Cored.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 204	C++
       	Qt5Cored.dll!QCoreApplication::exec() Line 1229	C++
       	Qt5Guid.dll!QGuiApplication::exec() Line 1528	C++
       	Qt5Widgetsd.dll!QApplication::exec() Line 2977	C++
       	nestedlooptest.exe!main(int argc, char * * argv) Line 37	C++
       	nestedlooptest.exe!WinMain(HINSTANCE__ * __formal, HINSTANCE__ * __formal, char * __formal, int __formal) Line 113	C++
       	nestedlooptest.exe!__tmainCRTStartup() Line 618	C
       	nestedlooptest.exe!WinMainCRTStartup() Line 466	C
       	kernel32.dll!BaseThreadInitThunk()	Unknown
       	ntdll.dll!RtlUserThreadStart()	Unknown
      

      This crash is very similar to QTBUG-45182 . But the fix for that bug is not sufficient for this one.

      Attachments

        For Gerrit Dashboard: QTBUG-48382
        # Subject Branch Project Status CR V

        Activity

          People

            dedietri Gabriel de Dietrich (drgvond)
            acossette Alexandre Cossette-Pacheco
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes