Details
-
Bug
-
Resolution: Done
-
P1: Critical
-
5.4.0, 5.5.0, 5.5.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 |
126440,6 | MenuBar: Refactor logic for setting the current menu | 5.5 | qt/qtquickcontrols | Status: MERGED | +2 | 0 |
126451,4 | Menus: Clean popup hide and destroy logic | 5.5 | qt/qtquickcontrols | Status: MERGED | +2 | 0 |
126492,2 | Menu: Fix crash when running the event loop on item trigger | 5.5.1 | qt/qtquickcontrols | Status: MERGED | +2 | 0 |
168383,2 | MenuBar: Refactor logic for setting the current menu | tqtc/vxworks-5.5 | qt/tqtc-qtquickcontrols | Status: MERGED | +2 | 0 |
168384,2 | Menus: Clean popup hide and destroy logic | tqtc/vxworks-5.5 | qt/tqtc-qtquickcontrols | Status: MERGED | +2 | 0 |