summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp')
-rw-r--r--tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
index ff1d8b2a36..ccaa2bec4f 100644
--- a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
+++ b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
@@ -69,6 +69,7 @@ private slots:
void eventLoopExecAfterExit();
void customEventDispatcher();
void testQuitLock();
+ void QTBUG31606_QEventDestructorDeadLock();
};
class EventSpy : public QObject
@@ -769,6 +770,33 @@ void tst_QCoreApplication::testQuitLock()
app.exec();
}
+
+void tst_QCoreApplication::QTBUG31606_QEventDestructorDeadLock()
+{
+ class MyEvent : public QEvent
+ { public:
+ MyEvent() : QEvent(QEvent::Type(QEvent::User + 1)) {}
+ ~MyEvent() {
+ QCoreApplication::postEvent(qApp, new QEvent(QEvent::Type(QEvent::User+2)));
+ }
+ };
+
+ int argc = 1;
+ char *argv[] = { const_cast<char*>("tst_qcoreapplication") };
+ QCoreApplication app(argc, argv);
+
+ EventSpy spy;
+ app.installEventFilter(&spy);
+
+ QCoreApplication::postEvent(&app, new MyEvent);
+ QCoreApplication::processEvents();
+ QVERIFY(spy.recordedEvents.contains(QEvent::User + 1));
+ QVERIFY(!spy.recordedEvents.contains(QEvent::User + 2));
+ QCoreApplication::processEvents();
+ QVERIFY(spy.recordedEvents.contains(QEvent::User + 2));
+}
+
+
static void createQObjectOnDestruction()
{
// Make sure that we can create a QObject after the last QObject has been