rpms/qt/devel 0256-fix-recursive-backingstore-sync-crash.diff, NONE, 1.1 qt.spec, 1.214, 1.215 qt-x11-opensource-src-4.4.1-systray.patch, 1.1, NONE

Rex Dieter rdieter at fedoraproject.org
Mon Nov 10 17:37:54 UTC 2008


Author: rdieter

Update of /cvs/pkgs/rpms/qt/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv31096

Modified Files:
	qt.spec 
Added Files:
	0256-fix-recursive-backingstore-sync-crash.diff 
Removed Files:
	qt-x11-opensource-src-4.4.1-systray.patch 
Log Message:
include 0256 qt-copy patch separately (if not using other qt-copy patches)


0256-fix-recursive-backingstore-sync-crash.diff:

--- NEW FILE 0256-fix-recursive-backingstore-sync-crash.diff ---
qt-bugs@ issue : N227209
Trolltech task ID : none yet
bugs.kde.org number : 174065
applied: yes
author: Szymon Tomasz Stefanek <s.stefanek at gmail.com>

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
===================================================================
--- src/gui/painting/qbackingstore.cpp	(revision 879741)
+++ 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


Index: qt.spec
===================================================================
RCS file: /cvs/pkgs/rpms/qt/devel/qt.spec,v
retrieving revision 1.214
retrieving revision 1.215
diff -u -r1.214 -r1.215
--- qt.spec	10 Nov 2008 14:24:35 -0000	1.214
+++ qt.spec	10 Nov 2008 17:37:23 -0000	1.215
@@ -46,6 +46,7 @@
 %{?qt_copy:Source2: qt-copy-patches-%{qt_copy}svn.tar.bz2}
 %{?qt_copy:Provides: qt-copy = %{qt_copy}}
 %{?qt_copy:Provides: qt4-copy = %{qt_copy}}
+Patch100: 0256-fix-recursive-backingstore-sync-crash.diff
 
 Source11: qt4.sh
 Source12: qt4.csh
@@ -274,6 +275,8 @@
 echo "0250" >> patches/DISABLED
 echo "0251" >> patches/DISABLED
 test -x apply_patches && ./apply_patches
+%else
+%patch100 -p0
 %endif
 
 # don't use -b on mkspec files, else they get installed too.


--- qt-x11-opensource-src-4.4.1-systray.patch DELETED ---




More information about the fedora-extras-commits mailing list