diff options
Diffstat (limited to 'tests/auto/gui/qopengl/tst_qopengl.cpp')
-rw-r--r-- | tests/auto/gui/qopengl/tst_qopengl.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/auto/gui/qopengl/tst_qopengl.cpp b/tests/auto/gui/qopengl/tst_qopengl.cpp index af59f3e31a3..3f4aa8cd8f9 100644 --- a/tests/auto/gui/qopengl/tst_qopengl.cpp +++ b/tests/auto/gui/qopengl/tst_qopengl.cpp @@ -84,6 +84,9 @@ private slots: void bufferCreate(); void bufferMapRange(); void defaultQGLCurrentBuffer(); +#if QT_CONFIG(egl) + void dontCrashOnInvalidContextThreadTeardown(); +#endif }; struct SharedResourceTracker @@ -1751,6 +1754,31 @@ void tst_QOpenGL::clipRect() //QCOMPARE(fb.pixelColor(clipRect.right(), clipRect.top() + 1), QColor(Qt::red)); } +#if QT_CONFIG(egl) +void tst_QOpenGL::dontCrashOnInvalidContextThreadTeardown() +{ + class Thread : public QThread + { + void run() override + { + auto context = std::make_unique<QOpenGLContext>(); + QVERIFY(context->create()); + QScopedPointer<QSurface> surface(createSurface(int(QSurface::Window))); + QVERIFY(context->makeCurrent(surface.data())); + auto eglContext = context->nativeInterface<QNativeInterface::QEGLContext>(); + if (!eglContext) { + QSKIP("Need an egl context for this test"); + } + eglContext->invalidateContext(); + context->doneCurrent(); + } + }; + Thread thread; + thread.start(); + thread.wait(); +} +#endif + QTEST_MAIN(tst_QOpenGL) #include "tst_qopengl.moc" |