diff -u qt4-x11-4.4.3/debian/changelog qt4-x11-4.4.3/debian/changelog --- qt4-x11-4.4.3/debian/changelog +++ qt4-x11-4.4.3/debian/changelog @@ -1,3 +1,11 @@ +qt4-x11 (4.4.3-0ubuntu1.1) intrepid-proposed; urgency=low + + * Add 0256-fix-recursive-backingstore-sync-crash.diff from KDE's qt-copy + Fixes KDE bug 174065 in kmail (new mailing list) + "Random crashes deep in Qt painting code" + + -- Jonathan Riddell Tue, 11 Nov 2008 22:14:12 +0000 + qt4-x11 (4.4.3-0ubuntu1) intrepid; urgency=low * New Upstream Release - bump config from ubuntu 4.4.2 deb diff -u qt4-x11-4.4.3/debian/patches/series qt4-x11-4.4.3/debian/patches/series --- qt4-x11-4.4.3/debian/patches/series +++ qt4-x11-4.4.3/debian/patches/series @@ -44,0 +45 @@ +0256-fix-recursive-backingstore-sync-crash.diff only in patch2: unchanged: --- qt4-x11-4.4.3.orig/debian/patches/0256-fix-recursive-backingstore-sync-crash.diff +++ qt4-x11-4.4.3/debian/patches/0256-fix-recursive-backingstore-sync-crash.diff @@ -0,0 +1,40 @@ +qt-bugs@ issue : N227209 +Trolltech task ID : none yet +bugs.kde.org number : 174065 +applied: yes +author: Szymon Tomasz Stefanek + +This patch fixes a crash deep inside the qt painting engine. + +The toplevel shared painter is instantiated by the topmost window +which "owns" the backingstore buffer. The topmost window then recursively +asks the children to paint themselves with the shared painter. +With certain widget hierarchies it turns out that the topmost window +may be asked to paint itself deep inside the recursive painting stack: +a sort of "hierarchy-looping recursion". +The window will do the job and then happily destroy the shared +painter leaving the outer stack frames with a dangling pointer. + +This patch stops the "looping recursion" when it's triggered +with a shared painter already active. The bug doesn't seem to +be present in qt 4.5 snapshots, but in the meantime we need this fix. + + +Index: src/gui/painting/qbackingstore.cpp +=================================================================== +--- a/src/gui/painting/qbackingstore.cpp (revision 879741) ++++ b/src/gui/painting/qbackingstore.cpp (working copy) +@@ -987,8 +987,12 @@ + return; + } + +- if (tlw->updatesEnabled()) { ++ // With certain widget hierarchies we may end up being called recursively ++ // on the same toplevel. This is likely to explode once the painter is released ++ // in the code below (since there is no reference counting). Avoid it. ++ bool alreadyPainting = tlwExtra->sharedPainter && tlwExtra->sharedPainter->isActive(); + ++ if (tlw->updatesEnabled() && !alreadyPainting) { + // hw: XXX the toClean region is not correct if !dirtyWidgets.isEmpty() + + // Pre render config