diff options
author | Trond Kjernåsen <trond@trolltech.com> | 2010-03-04 11:06:19 (GMT) |
---|---|---|
committer | Trond Kjernåsen <trond@trolltech.com> | 2010-03-04 11:09:47 (GMT) |
commit | a9bf9766f18e15fbecf53ac1cc9cf57c9dba259c (patch) | |
tree | cd6b7c430b7cc1b7a50a82515414ee1c2e51dfb0 | |
parent | 2aaf4d1a35792ba7d0d0f217dbda1c1297389f3e (diff) | |
download | Qt-a9bf9766f18e15fbecf53ac1cc9cf57c9dba259c.zip Qt-a9bf9766f18e15fbecf53ac1cc9cf57c9dba259c.tar.gz Qt-a9bf9766f18e15fbecf53ac1cc9cf57c9dba259c.tar.bz2 |
Fixed an exit crash that could occur in the GL 2 engine under X11.
The global destructor for the clean up hooks might be called before the
global destructor for QPixmap objects. We shouldn't leave pixmaps
around that is destroyed after the QApplication destructor is called.
Task-number: QTBUG-8681
Reviewed-by: Tom Cooksey
-rw-r--r-- | src/gui/image/qimagepixmapcleanuphooks.cpp | 10 | ||||
-rw-r--r-- | src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp | 1 |
2 files changed, 11 insertions, 0 deletions
diff --git a/src/gui/image/qimagepixmapcleanuphooks.cpp b/src/gui/image/qimagepixmapcleanuphooks.cpp index 517fcb0..521e348 100644 --- a/src/gui/image/qimagepixmapcleanuphooks.cpp +++ b/src/gui/image/qimagepixmapcleanuphooks.cpp @@ -96,6 +96,11 @@ void QImagePixmapCleanupHooks::removeImageHook(_qt_image_cleanup_hook_64 hook) void QImagePixmapCleanupHooks::executePixmapDataModificationHooks(QPixmapData* pmd) { QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks(); + // the global destructor for the pixmap and image hooks might have + // been called already if the app is "leaking" global + // pixmaps/images + if (!h) + return; for (int i = 0; i < h->pixmapModificationHooks.count(); ++i) h->pixmapModificationHooks[i](pmd); @@ -106,6 +111,11 @@ void QImagePixmapCleanupHooks::executePixmapDataModificationHooks(QPixmapData* p void QImagePixmapCleanupHooks::executePixmapDataDestructionHooks(QPixmapData* pmd) { QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks(); + // the global destructor for the pixmap and image hooks might have + // been called already if the app is "leaking" global + // pixmaps/images + if (!h) + return; for (int i = 0; i < h->pixmapDestructionHooks.count(); ++i) h->pixmapDestructionHooks[i](pmd); diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index c08d04a..2b8e097 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -1597,6 +1597,7 @@ bool QGL2PaintEngineEx::end() delete d->shaderManager; d->shaderManager = 0; + d->currentBrush = QBrush(); #ifdef QT_OPENGL_CACHE_AS_VBOS if (!d->unusedVBOSToClean.isEmpty()) { |