diff options
author | Berthold Krevert <berthold.krevert@basyskom.de> | 2012-06-06 13:52:29 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-15 19:36:35 +0200 |
commit | 3a77bbe68b087890fe966035eeb12b917b087c15 (patch) | |
tree | 85117de272ad09b2b18508973883007c7a434fdb /src/widgets/kernel/qwidget_qpa.cpp | |
parent | e83c3a0d33b7d8ffd0735136fb5e8b8c73f5bcfd (diff) |
Fix: Widgets that become top-level widgets may crash the application
You can reproduce the bug with the QMainWindow demo application: Just
dock the toolbar on the left side, then try to drag the bar back to
the top and observe that the application crashes.
This happens, because the toolbar becomes a top-level widget during the
dragging action and therefore some data structures like a window are
created. After the toolbar has been docked, it loses its top-level state
and the window object is destroyed. The same is not true for the backing
store structure, which still keeps a pointer to the destroyed window.
When the toolbar is dragged the next time, a new window object is created,
but the backing store tries to access the deleted one. Crash occurs.
Change-Id: I0d1ffc04c19ec14654ceb62a0d3cf7cf65cb952d
Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
Diffstat (limited to 'src/widgets/kernel/qwidget_qpa.cpp')
-rw-r--r-- | src/widgets/kernel/qwidget_qpa.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/widgets/kernel/qwidget_qpa.cpp b/src/widgets/kernel/qwidget_qpa.cpp index a7dd6bf01c..04bf0be27f 100644 --- a/src/widgets/kernel/qwidget_qpa.cpp +++ b/src/widgets/kernel/qwidget_qpa.cpp @@ -914,9 +914,13 @@ void QWidgetPrivate::deleteTLSysExtra() extra->topextra->window->destroy(); } setWinId(0); - //hmmm. should we delete window.. delete extra->topextra->window; extra->topextra->window = 0; + + extra->topextra->backingStoreTracker.destroy(); + delete extra->topextra->backingStore; + extra->topextra->backingStore = 0; + } } |