xorg-server: Changes to 'debian-unstable'
ChangeLog | 297
Xext/geext.c | 13
Xext/geint.h | 3
configure.ac | 4
debian/changelog | 10
debian/patches/19-exa-handle-pixmap-create-destroy-in-lower-layers.diff | 887 --
debian/patches/series | 1
debian/rules | 2
debian/xsfbs/xsfbs.mk | 18
dix/events.c | 8
exa/exa.c | 145
exa/exa_accel.c | 45
exa/exa_classic.c | 8
exa/exa_driver.c | 8
exa/exa_mixed.c | 8
exa/exa_priv.h | 17
exa/exa_unaccel.c | 73
hw/vfb/InitInput.c | 6
hw/xquartz/GL/indirect.c | 2
hw/xquartz/X11Application.h | 1
hw/xquartz/X11Application.m | 19
hw/xquartz/X11Controller.h | 6
hw/xquartz/X11Controller.m | 102
hw/xquartz/bundle/Resources/Dutch.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib | 104
hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/English.lproj/main.nib/designable.nib | 1791 +---
hw/xquartz/bundle/Resources/English.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/French.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/French.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/French.lproj/main.nib/designable.nib | 105
hw/xquartz/bundle/Resources/French.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/German.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/German.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib | 106
hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/Italian.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/Italian.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/Italian.lproj/main.nib/designable.nib | 108
hw/xquartz/bundle/Resources/Italian.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/Japanese.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/designable.nib | 125
hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/Spanish.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib | 96
hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/ar.lproj/InfoPlist.strings |binary
hw/xquartz/bundle/Resources/ar.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/ar.lproj/locversion.plist | 14
hw/xquartz/bundle/Resources/ar.lproj/main.nib/designable.nib | 3955 ++++++++++
hw/xquartz/bundle/Resources/ar.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/da.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/da.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib | 82
hw/xquartz/bundle/Resources/da.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/fi.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/fi.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib | 167
hw/xquartz/bundle/Resources/fi.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/ko.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/ko.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib | 82
hw/xquartz/bundle/Resources/ko.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/no.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/no.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/no.lproj/main.nib/designable.nib | 82
hw/xquartz/bundle/Resources/no.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/pl.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/pl.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib | 92
hw/xquartz/bundle/Resources/pl.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/pt.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/pt.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib | 82
hw/xquartz/bundle/Resources/pt.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/pt_PT.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/pt_PT.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib | 112
hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/ru.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/ru.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/ru.lproj/main.nib/designable.nib | 110
hw/xquartz/bundle/Resources/ru.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/sv.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/sv.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib | 82
hw/xquartz/bundle/Resources/sv.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/zh_CN.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/zh_CN.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/zh_CN.lproj/main.nib/designable.nib | 84
hw/xquartz/bundle/Resources/zh_CN.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/bundle/Resources/zh_TW.lproj/Localizable.strings |binary
hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist | 4
hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib | 84
hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/keyedobjects.nib |binary
hw/xquartz/doc/Makefile.am | 2
hw/xquartz/doc/Xquartz.man.pre | 39
hw/xquartz/quartz.c | 1
hw/xquartz/quartzCommon.h | 1
hw/xquartz/quartzKeyboard.c | 91
hw/xquartz/quartzKeyboard.h | 10
mi/midispcur.c | 6
os/connection.c | 5
106 files changed, 5921 insertions(+), 3448 deletions(-)
New commits:
commit 93b277dbf3ac7490de09716403d68c67f2ad08cb
Author: Julien Cristau <jcristau@debian.org>
Date: Fri Apr 30 15:49:37 2010 +0200
Update changelogs and delete merged patch
diff --git a/ChangeLog b/ChangeLog
index 9211d5b..1d9cbca 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,300 @@
+commit 2c94da4e22520f4a3e783db06b73251131382868
+Author: Michel Dänzer <daenzer@vmware.com>
+Date: Thu Apr 22 14:16:59 2010 +0200
+
+ EXA: Check sys_ptr isn't NULL before passing it to the UploadToScreen hook.
+
+ Fixes https://bugs.freedesktop.org/show_bug.cgi?id=27380 .
+
+ Signed-off-by: Michel Dänzer <daenzer@vmware.com>
+ Reviewed-by: Alex Deucher <alexdeucher@gmail.com>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+ (cherry picked from commit 7b6517526631a65891b806bca30be8f49955d0a8)
+
+commit 7815b02e8d9636b6abbe1f7cb555a1069db2d59f
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Wed Apr 21 11:47:24 2010 +1000
+
+ Revert "mi: don't thrash resources when displaying the software cursor across screens"
+
+ This commit leads to a segfault on the very first XTS test case.
+
+ Backtrace:
+ 0: /opt/xorg/bin/Xorg (xorg_backtrace+0x3b) [0x80a33db]
+ 1: /opt/xorg/bin/Xorg (0x8048000+0x62a75) [0x80aaa75]
+ 2: (vdso) (__kernel_rt_sigreturn+0x0) [0x5d140c]
+ 3: /lib/libc.so.6 (0x9bb000+0x73579) [0xa2e579]
+ 4: /lib/libc.so.6 (realloc+0xe0) [0xa2e830]
+ 5: /opt/xorg/bin/Xorg (Xrealloc+0x33) [0x80a3f33]
+ 6: /opt/xorg/bin/Xorg (0x8048000+0x1ab79) [0x8062b79]
+ 7: /opt/xorg/bin/Xorg (0x8048000+0x1ac4e) [0x8062c4e]
+ 8: /opt/xorg/bin/Xorg (RegisterExtensionNames+0x2ce) [0x8062fbe]
+ 9: /opt/xorg/bin/Xorg (AddExtension+0x19a) [0x807bd7a]
+ 10: /opt/xorg//lib/xorg/modules/extensions/libextmod.so (0x728000+0x1169a)
+ [0x73969a]
+ 11: /opt/xorg/bin/Xorg (InitExtensions+0x85) [0x80c0eb5]
+ 12: /opt/xorg/bin/Xorg (0x8048000+0x1a51d) [0x806251d]
+ 13: /lib/libc.so.6 (__libc_start_main+0xe6) [0x9d1bb6]
+ 14: /opt/xorg/bin/Xorg (0x8048000+0x1a2a1) [0x80622a1]
+ Segmentation fault at address 0x10b2d5f8
+
+ valgrind output:
+ ==5069== Invalid read of size 4
+ ==5069== at 0x80F928D: FreePicture (picture.c:1531)
+ ==5069== by 0x818DDEF: miDCDeviceCleanup (midispcur.c:867)
+ ==5069== by 0x81B97F0: miSpriteDeviceCursorCleanup (misprite.c:968)
+ ==5069== by 0x80995FA: miPointerDeviceCleanup (mipointer.c:292)
+ ==5069== by 0x807973E: CloseDevice (devices.c:840)
+ ==5069== by 0x80799B6: CloseDownDevices (devices.c:933)
+ ==5069== by 0x8062705: main (main.c:309)
+ ==5069== Address 0x4cce844 is 12 bytes inside a block of size 84 free'd
+ ==5069== at 0x40057F6: free (vg_replace_malloc.c:325)
+ ==5069== by 0x80A3DE0: Xfree (utils.c:1154)
+ ==5069== by 0x80F9332: FreePicture (picture.c:1576)
+ ==5069== by 0x80FBB4B: PictureDestroyWindow (picture.c:69)
+ ==5069== by 0x810B1A3: damageDestroyWindow (damage.c:1840)
+ ==5069== by 0x80864F1: FreeWindowResources (window.c:846)
+ ==5069== by 0x8086812: DeleteWindow (window.c:925)
+ ==5069== by 0x806B53E: FreeClientResources (resource.c:806)
+ ==5069== by 0x806B60F: FreeAllResources (resource.c:823)
+ ==5069== by 0x80626E4: main (main.c:299)
+ ==5069==
+ ==5069== Invalid write of size 4
+ ==5069== at 0x80F9295: FreePicture (picture.c:1531)
+ ==5069== by 0x818DDEF: miDCDeviceCleanup (midispcur.c:867)
+ ==5069== by 0x81B97F0: miSpriteDeviceCursorCleanup (misprite.c:968)
+ ==5069== by 0x80995FA: miPointerDeviceCleanup (mipointer.c:292)
+ ==5069== by 0x807973E: CloseDevice (devices.c:840)
+ ==5069== by 0x80799B6: CloseDownDevices (devices.c:933)
+ ==5069== by 0x8062705: main (main.c:309)
+ ==5069== Address 0x4cce844 is 12 bytes inside a block of size 84 free'd
+ ==5069== at 0x40057F6: free (vg_replace_malloc.c:325)
+ ==5069== by 0x80A3DE0: Xfree (utils.c:1154)
+ ==5069== by 0x80F9332: FreePicture (picture.c:1576)
+ ==5069== by 0x80FBB4B: PictureDestroyWindow (picture.c:69)
+ ==5069== by 0x810B1A3: damageDestroyWindow (damage.c:1840)
+ ==5069== by 0x80864F1: FreeWindowResources (window.c:846)
+ ==5069== by 0x8086812: DeleteWindow (window.c:925)
+ ==5069== by 0x806B53E: FreeClientResources (resource.c:806)
+ ==5069== by 0x806B60F: FreeAllResources (resource.c:823)
+ ==5069== by 0x80626E4: main (main.c:299)
+
+ XTS test case: Xproto pAllocColor
+
+ This reverts commit 00b8b7ad61b6f818271fb4d1e383113170309d72.
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit ba2ba32e04f9002dbb60f10e174ac63d16e5f507
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Wed Apr 21 09:17:26 2010 +1000
+
+ xserver 1.7.6.902
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit e8fae02f19d6d75ac3edbea2f5af8d250dcfbde3
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Wed Apr 14 17:43:22 2010 +1000
+
+ dix: Fix crash in DeliverGrabbedEvents.
+
+ If both devices are synchronously grabbed, first with a GrabPointer, then
+ with a GrabKeyboard (GrabModeSync on both), sync.other of each device points
+ to the grab of the respective other device.
+
+ If the keyboard is then thawed through a AllowSome request, the VCK's
+ sync.other is reset to NULL. Subsequently, an event on the VCP would crash
+ the server when dereferencing sync.other on the VCP.
+
+ The check's purpose is to compare if the other device is grabbed by the same
+ client, which should be checked by accessing (dev->deviceGrab->grab->resource).
+ A check of the server-1.3 sources confirms that.
+
+ XTS test case: Xlib13 XAllowEvents 20.
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Reviewed-by: Keith Packard <keithp@keithp.com>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+ (cherry picked from commit 9ddbb03fa56aa73c3f417d8ee6433e45b94445b3)
+
+commit aa6a18fdebf444084c27e4a7f3eef7d93f9929b0
+Author: Cyril Brulebois <kibi@debian.org>
+Date: Sat Apr 17 01:31:14 2010 +0200
+
+ exa: handle pixmap create/destroy in lower layers
+
+ - Pixmaps that are created during a fallback are automatically prepared access.
+ - During the fallback accelerated ops are blocked to prevent new/scratch gc's
+ from triggering accelerated ops on mapped pixmaps.
+ - A few cases of incorrect wrapping (on the top level pointer instead of
+ between damage and (w)fb) have been removed.
+
+ Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
+ Acked-by: Michel Dänzer <michel@daenzer.net>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+ (cherry picked from commit 342f3689d17256c92cbfee079d24501d27aa1153)
+
+ Conflicts:
+
+ exa/exa_mixed.c
+
+ Debian bug#576816 <http://bugs.debian.org/576816>
+
+ Tested-by: Arthur Marsh <arthur.marsh@internode.on.net>
+ Signed-off-by: Cyril Brulebois <kibi@debian.org>
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit acbcb77bf6acf513660b4a9df8d20a5c04f1c865
+Author: Julien Cristau <jcristau@debian.org>
+Date: Tue Apr 6 11:51:53 2010 +0200
+
+ XGE: don't register an extension event
+
+ The GenericEvent is a core event, we never send an extension event, so
+ don't reserve an id for one.
+
+ Signed-off-by: Julien Cristau <jcristau@debian.org>
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+ (cherry picked from commit fc5d76740851725e3788c68e14474a012a205892)
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit c52b9e143da294e787d93ddbd7b9b620a3a892e2
+Author: Julien Cristau <jcristau@debian.org>
+Date: Tue Apr 13 22:28:36 2010 +0200
+
+ vfb: add a name and type to the pointer and keyboard
+
+ Fixes a crash in XIQueryDevice which calls strlen on a NULL pointer.
+
+ #0 strlen () at ../sysdeps/x86_64/strlen.S:31
+ #1 0x00000000004c16ed in SizeDeviceInfo (dev=0x969bd0)
+ at ../../Xi/xiquerydevice.c:204
+ #2 0x00000000004c1a01 in ProcXIQueryDevice (client=0xa57510)
+ at ../../Xi/xiquerydevice.c:98
+
+ Debian bug#575905 <http://bugs.debian.org/575905>
+
+ Reported-by: "Bernhard R. Link" <brlink@debian.org>
+ Signed-off-by: Julien Cristau <jcristau@debian.org>
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+ (cherry picked from commit 0e7703f9b1927328954a2fc87aac6be244819329)
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 9a9a19ac4ecdab0e2602d70354145545de37f3c5
+Author: Pierre-Loup A. Griffais <pgriffais@nvidia.com>
+Date: Wed Apr 7 13:52:47 2010 -0700
+
+ mi: don't thrash resources when displaying the software cursor across screens
+
+ This changes the DC layer to maintain a persistent set of GCs/pixmaps/pictures
+ for each pScreen instead of failing to thrash between them when changing
+ screens.
+
+ Signed-off-by: Pierre-Loup A. Griffais <pgriffais@nvidia.com>
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+ (cherry picked from commit 00b8b7ad61b6f818271fb4d1e383113170309d72)
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit ff02e0e4a2f33131520bc3bf7d6621a301c5296d
+Author: Tim Yamin <plasm@roo.me.uk>
+Date: Mon Mar 8 12:45:15 2010 +1000
+
+ dix: fix cursor screen check for xinerama setups.
+
+ The de-duplication of CheckPhysLimits 942eae6868b8b0f343b6a added a
+ condition that is invalid for a Xinerama setup. pScreen is invalid for the
+ Xinerama case, so comparing it to anything is a bad idea.
+
+ Signed-off-by: Tim Yamin <plasm@roo.me.uk>
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+ (cherry picked from commit 5f31e2196179f8db3170d65a17d8ad40da1acb0d)
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 8616c5eb756aeb408545da5d186ad28909574dcb
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date: Thu Apr 15 10:55:53 2010 -0700
+
+ XQuartz GLX: Don't let garbage enter our pixel request
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=27654
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+ (cherry picked from commit 5b0faf355465c9f21ad96e0ed266fbdbc29efb5b)
+
+commit 0dd9d27eaacc02f968ce98749a1696189274a8f8
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date: Wed Apr 14 09:06:04 2010 -0700
+
+ XQuartz: Fix possible NULL dereference in ListenOnOpenFD
+
+ <rdar://problem/7862319>
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+ Reviewed-by: Marc Majka <majka@apple.com>
+ (cherry picked from commit fe7778e58e099d353689755ed2f5aa440569ebe3)
+
+commit 3d7d699e3a024c870bca9cb0e1c922dbb87d5316
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date: Tue Apr 13 14:33:49 2010 -0700
+
+ XQuartz: Localization update
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+ (cherry picked from commit 206531f75cd41c034e89fdfbc75ab0910682eef8)
+
+commit e7ab6537c2745decb7143c5e4eb31440be262fd0
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date: Fri Apr 9 16:19:43 2010 -0700
+
+ XQuartz: Add a GUI preference for the Alt / Mode_switch toggle
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+ Reviewed-by: Kevin Van Vechten <kvv@apple.com>
+ (cherry picked from commit 59edde7c28db2d3174a5813a0af334e4ead2082f)
+
+commit 30f4c7e4fb20f9d465e6a56db937c4af48885161
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date: Fri Apr 9 13:33:06 2010 -0700
+
+ XQuartz: Customize the NSDefaults id in the man file.
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+ Reviewed-by: Kevin Van Vechten <kvv@apple.com>
+ (cherry picked from commit 5600f7f001529b3afdee95546aec212a70d6a5b2)
+
+commit a75e4be03c7888a86a9b76de11e39ff8f9f7ac86
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date: Fri Apr 9 13:29:34 2010 -0700
+
+ XQuartz: Add a defaults option to toggle Alt / Mode_switch
+
+ See option_sends_alt in Xquartz(1)
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+ Reviewed-by: Kevin Van Vechten <kvv@apple.com>
+ (cherry picked from commit 840d12c7a6ac6a974da185045215ce944a61fab6)
+
+commit af86a25009c337954f61475196a0092712cab1e1
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date: Mon Apr 5 16:54:22 2010 -0700
+
+ XQuartz: Blacklist some oddball legacy Mac keycodes that break wine
+
+ http://xquartz.macosforge.org/trac/ticket/295
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+ Reviewed-by: Kevin Van Vechten <kvv@apple.com>
+ (cherry picked from commit d6f160510a50d4c4eaa48c9c69a5ddda0d50052c)
+
commit 501c0ee63570da7501d047c51c40a2568af1df08
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Mon Apr 12 11:51:21 2010 +1000
diff --git a/debian/changelog b/debian/changelog
index 49e4854..b0528dc 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-xorg-server (2:1.7.6.901-4) UNRELEASED; urgency=low
+xorg-server (2:1.7.6.902-1) UNRELEASED; urgency=low
[ Timo Aaltonen ]
* Update patch 17; Add missing __datadir__ to cpprules.in.
@@ -16,8 +16,13 @@ xorg-server (2:1.7.6.901-4) UNRELEASED; urgency=low
* Change driver ABI Conflicts to Breaks. Drop old Conflicts/Replaces on
pre-modular xserver packages.
* Unset PRERELEASE to avoid the prerelease warning in the log.
+ * New upstream release candidate
+ - pull server-1.7-nominations up to commit 2c94da4
+ - fixes Xvfb crash with XI2 (closes: #575905)
+ * 19-exa-handle-pixmap-create-destroy-in-lower-layers.diff is now upstream,
+ remove it.
- -- Timo Aaltonen <tjaalton@ubuntu.com> Tue, 20 Apr 2010 17:46:32 +0300
+ -- Julien Cristau <jcristau@debian.org> Fri, 30 Apr 2010 15:46:51 +0200
xorg-server (2:1.7.6.901-3) unstable; urgency=low
diff --git a/debian/patches/19-exa-handle-pixmap-create-destroy-in-lower-layers.diff b/debian/patches/19-exa-handle-pixmap-create-destroy-in-lower-layers.diff
deleted file mode 100644
index 9d308ed..0000000
--- a/debian/patches/19-exa-handle-pixmap-create-destroy-in-lower-layers.diff
+++ /dev/null
@@ -1,887 +0,0 @@
-From 23636fb5f7b9a984d0b16a195ad448a96f2f22d3 Mon Sep 17 00:00:00 2001
-From: Cyril Brulebois <kibi@debian.org>
-Date: Sat, 17 Apr 2010 01:12:34 +0200
-Subject: [PATCH] exa: handle pixmap create/destroy in lower layers
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-- Pixmaps that are created during a fallback are automatically prepared access.
-- During the fallback accelerated ops are blocked to prevent new/scratch gc's
- from triggering accelerated ops on mapped pixmaps.
-- A few cases of incorrect wrapping (on the top level pointer instead of
- between damage and (w)fb) have been removed.
-
-Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
-Acked-by: Michel Dänzer <michel@daenzer.net>
-Signed-off-by: Keith Packard <keithp@keithp.com>
-(cherry picked from commit 342f3689d17256c92cbfee079d24501d27aa1153)
-
-Conflicts:
-
- exa/exa_mixed.c
-
-Debian bug#576816 <http://bugs.debian.org/576816>
-
-Tested-by: Arthur Marsh <arthur.marsh@internode.on.net>
-Signed-off-by: Cyril Brulebois <kibi@debian.org>
----
- exa/exa.c | 145 ++++++++++++-----------------------------------------
- exa/exa_accel.c | 40 +++++++++++----
- exa/exa_classic.c | 8 +++
- exa/exa_driver.c | 8 +++
- exa/exa_mixed.c | 8 +++
- exa/exa_priv.h | 17 +++++--
- exa/exa_unaccel.c | 73 ++++++++++++++-------------
- 7 files changed, 137 insertions(+), 162 deletions(-)
-
-diff --git a/exa/exa.c b/exa/exa.c
-index e264d44..b8f0419 100644
---- a/exa/exa.c
-+++ b/exa/exa.c
-@@ -480,57 +480,6 @@ const GCFuncs exaGCFuncs = {
- exaCopyClip
- };
-
--/*
-- * This wrapper exists to allow fbValidateGC to work.
-- * Note that we no longer assume newly created pixmaps to be in normal ram.
-- * This assumption is certainly not garuanteed with driver allocated pixmaps.
-- */
--static PixmapPtr
--exaCreatePixmapWithPrepare(ScreenPtr pScreen, int w, int h, int depth,
-- unsigned usage_hint)
--{
-- PixmapPtr pPixmap;
-- ExaScreenPriv(pScreen);
--
-- /* This swaps between this function and the real upper layer function.
-- * Normally this would swap to the fb layer pointer, this is a very special case.
-- */
-- swap(pExaScr, pScreen, CreatePixmap);
-- pPixmap = pScreen->CreatePixmap(pScreen, w, h, depth, usage_hint);
-- swap(pExaScr, pScreen, CreatePixmap);
--
-- if (!pPixmap)
-- return NULL;
--
-- /* Note the usage of ExaDoPrepareAccess, this allowed because:
-- * The pixmap is new, so not offscreen in the classic exa case.
-- * For EXA_HANDLES_PIXMAPS the driver will handle whatever is needed.
-- * We want to signal that the pixmaps will be used as destination.
-- */
-- ExaDoPrepareAccess(pPixmap, EXA_PREPARE_AUX_DEST);
--
-- return pPixmap;
--}
--
--static Bool
--exaDestroyPixmapWithFinish(PixmapPtr pPixmap)
--{
-- ScreenPtr pScreen = pPixmap->drawable.pScreen;
-- ExaScreenPriv(pScreen);
-- Bool ret;
--
-- exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST);
--
-- /* This swaps between this function and the real upper layer function.
-- * Normally this would swap to the fb layer pointer, this is a very special case.
-- */
-- swap(pExaScr, pScreen, DestroyPixmap);
-- ret = pScreen->DestroyPixmap(pPixmap);
-- swap(pExaScr, pScreen, DestroyPixmap);
--
-- return ret;
--}
--
- static void
- exaValidateGC(GCPtr pGC,
- unsigned long changes,
-@@ -542,20 +491,9 @@ exaValidateGC(GCPtr pGC,
-
- ScreenPtr pScreen = pDrawable->pScreen;
- ExaScreenPriv(pScreen);
-- CreatePixmapProcPtr old_ptr = NULL;
-- DestroyPixmapProcPtr old_ptr2 = NULL;
-+ ExaGCPriv(pGC);
- PixmapPtr pTile = NULL;
-- EXA_GC_PROLOGUE(pGC);
--
-- /* save the "fb" pointer. */
-- old_ptr = pExaScr->SavedCreatePixmap;
-- /* create a new upper layer pointer. */
-- wrap(pExaScr, pScreen, CreatePixmap, exaCreatePixmapWithPrepare);
--
-- /* save the "fb" pointer. */
-- old_ptr2 = pExaScr->SavedDestroyPixmap;
-- /* create a new upper layer pointer. */
-- wrap(pExaScr, pScreen, DestroyPixmap, exaDestroyPixmapWithFinish);
-+ Bool finish_current_tile = FALSE;
-
- /* Either of these conditions is enough to trigger access to a tile pixmap. */
- /* With pGC->tileIsPixel == 1, you run the risk of dereferencing an invalid tile pixmap pointer. */
-@@ -569,8 +507,10 @@ exaValidateGC(GCPtr pGC,
- */
- if (pTile && pTile->drawable.depth != pDrawable->depth && !(changes & GCTile)) {
- PixmapPtr pRotatedTile = fbGetRotatedPixmap(pGC);
-- if (pRotatedTile->drawable.depth == pDrawable->depth)
-+ if (pRotatedTile && pRotatedTile->drawable.depth == pDrawable->depth)
- pTile = pRotatedTile;
-+ else
-+ finish_current_tile = TRUE; /* CreatePixmap will be called. */
- }
- }
-
-@@ -579,42 +519,39 @@ exaValidateGC(GCPtr pGC,
- if (pTile)
- exaPrepareAccess(&pTile->drawable, EXA_PREPARE_SRC);
-
-+ /* Calls to Create/DestroyPixmap have to be identified as special. */
-+ pExaScr->fallback_counter++;
-+ swap(pExaGC, pGC, funcs);
- (*pGC->funcs->ValidateGC)(pGC, changes, pDrawable);
-+ swap(pExaGC, pGC, funcs);
-+ pExaScr->fallback_counter--;
-
- if (pTile)
- exaFinishAccess(&pTile->drawable, EXA_PREPARE_SRC);
-+ if (finish_current_tile && pGC->tile.pixmap)
-+ exaFinishAccess(&pGC->tile.pixmap->drawable, EXA_PREPARE_AUX_DEST);
- if (pGC->stipple)
-- exaFinishAccess(&pGC->stipple->drawable, EXA_PREPARE_MASK);
--
-- /* switch back to the normal upper layer. */
-- unwrap(pExaScr, pScreen, CreatePixmap);
-- /* restore copy of fb layer pointer. */
-- pExaScr->SavedCreatePixmap = old_ptr;
--
-- /* switch back to the normal upper layer. */
-- unwrap(pExaScr, pScreen, DestroyPixmap);
-- /* restore copy of fb layer pointer. */
-- pExaScr->SavedDestroyPixmap = old_ptr2;
--
-- EXA_GC_EPILOGUE(pGC);
-+ exaFinishAccess(&pGC->stipple->drawable, EXA_PREPARE_MASK);
- }
-
- /* Is exaPrepareAccessGC() needed? */
- static void
- exaDestroyGC(GCPtr pGC)
- {
-- EXA_GC_PROLOGUE (pGC);
-+ ExaGCPriv(pGC);
-+ swap(pExaGC, pGC, funcs);
- (*pGC->funcs->DestroyGC)(pGC);
-- EXA_GC_EPILOGUE (pGC);
-+ swap(pExaGC, pGC, funcs);
- }
-
- static void
- exaChangeGC (GCPtr pGC,
- unsigned long mask)
- {
-- EXA_GC_PROLOGUE (pGC);
-+ ExaGCPriv(pGC);
-+ swap(pExaGC, pGC, funcs);
- (*pGC->funcs->ChangeGC) (pGC, mask);
-- EXA_GC_EPILOGUE (pGC);
-+ swap(pExaGC, pGC, funcs);
- }
-
- static void
-@@ -622,9 +559,10 @@ exaCopyGC (GCPtr pGCSrc,
- unsigned long mask,
- GCPtr pGCDst)
- {
-- EXA_GC_PROLOGUE (pGCDst);
-+ ExaGCPriv(pGCDst);
-+ swap(pExaGC, pGCDst, funcs);
- (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
-- EXA_GC_EPILOGUE (pGCDst);
-+ swap(pExaGC, pGCDst, funcs);
- }
-
- static void
-@@ -633,25 +571,28 @@ exaChangeClip (GCPtr pGC,
- pointer pvalue,
- int nrects)
- {
-- EXA_GC_PROLOGUE (pGC);
-+ ExaGCPriv(pGC);
-+ swap(pExaGC, pGC, funcs);
- (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
-- EXA_GC_EPILOGUE (pGC);
-+ swap(pExaGC, pGC, funcs);
- }
-
- static void
- exaCopyClip(GCPtr pGCDst, GCPtr pGCSrc)
- {
-- EXA_GC_PROLOGUE (pGCDst);
-+ ExaGCPriv(pGCDst);
-+ swap(pExaGC, pGCDst, funcs);
- (*pGCDst->funcs->CopyClip)(pGCDst, pGCSrc);
-- EXA_GC_EPILOGUE (pGCDst);
-+ swap(pExaGC, pGCDst, funcs);
- }
-
- static void
- exaDestroyClip(GCPtr pGC)
- {
-- EXA_GC_PROLOGUE (pGC);
-+ ExaGCPriv(pGC);
-+ swap(pExaGC, pGC, funcs);
- (*pGC->funcs->DestroyClip)(pGC);
-- EXA_GC_EPILOGUE (pGC);
-+ swap(pExaGC, pGC, funcs);
- }
-
- /**
-@@ -682,18 +623,6 @@ exaChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
- Bool ret;
- ScreenPtr pScreen = pWin->drawable.pScreen;
- ExaScreenPriv(pScreen);
-- CreatePixmapProcPtr old_ptr = NULL;
-- DestroyPixmapProcPtr old_ptr2 = NULL;
--
-- /* save the "fb" pointer. */
-- old_ptr = pExaScr->SavedCreatePixmap;
-- /* create a new upper layer pointer. */
-- wrap(pExaScr, pScreen, CreatePixmap, exaCreatePixmapWithPrepare);
--
-- /* save the "fb" pointer. */
-- old_ptr2 = pExaScr->SavedDestroyPixmap;
-- /* create a new upper layer pointer. */
-- wrap(pExaScr, pScreen, DestroyPixmap, exaDestroyPixmapWithFinish);
-
- if ((mask & CWBackPixmap) && pWin->backgroundState == BackgroundPixmap)
- exaPrepareAccess(&pWin->background.pixmap->drawable, EXA_PREPARE_SRC);
-@@ -701,25 +630,17 @@ exaChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
- if ((mask & CWBorderPixmap) && pWin->borderIsPixel == FALSE)
- exaPrepareAccess(&pWin->border.pixmap->drawable, EXA_PREPARE_MASK);
-
-+ pExaScr->fallback_counter++;
- swap(pExaScr, pScreen, ChangeWindowAttributes);
- ret = pScreen->ChangeWindowAttributes(pWin, mask);
- swap(pExaScr, pScreen, ChangeWindowAttributes);
-+ pExaScr->fallback_counter--;
-
- if ((mask & CWBackPixmap) && pWin->backgroundState == BackgroundPixmap)
- exaFinishAccess(&pWin->background.pixmap->drawable, EXA_PREPARE_SRC);
- if ((mask & CWBorderPixmap) && pWin->borderIsPixel == FALSE)
- exaFinishAccess(&pWin->border.pixmap->drawable, EXA_PREPARE_MASK);
-
-- /* switch back to the normal upper layer. */
-- unwrap(pExaScr, pScreen, CreatePixmap);
-- /* restore copy of fb layer pointer. */
-- pExaScr->SavedCreatePixmap = old_ptr;
--
-- /* switch back to the normal upper layer. */
-- unwrap(pExaScr, pScreen, DestroyPixmap);
-- /* restore copy of fb layer pointer. */
-- pExaScr->SavedDestroyPixmap = old_ptr2;
--
- return ret;
- }
-
-diff --git a/exa/exa_accel.c b/exa/exa_accel.c
-index 7e2dd70..4f94ae8 100644
---- a/exa/exa_accel.c
-+++ b/exa/exa_accel.c
-@@ -51,7 +51,8 @@ exaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
- int partX1, partX2;
- int off_x, off_y;
-
-- if (pExaScr->swappedOut ||
-+ if (pExaScr->fallback_counter ||
-+ pExaScr->swappedOut ||
- pGC->fillStyle != FillSolid ||
- pExaPixmap->accel_blocked)
- {
-@@ -153,7 +154,7 @@ exaDoPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
- int bpp = pDrawable->bitsPerPixel;
- Bool ret = TRUE;
-
-- if (pExaPixmap->accel_blocked || !pExaScr->info->UploadToScreen)
-+ if (pExaScr->fallback_counter || pExaPixmap->accel_blocked || !pExaScr->info->UploadToScreen)
- return FALSE;
-
- /* Don't bother with under 8bpp, XYPixmaps. */
-@@ -568,7 +569,8 @@ exaCopyNtoN (DrawablePtr pSrcDrawable,
- {
- ExaScreenPriv(pDstDrawable->pScreen);
-
-- if (pExaScr->fallback_flags & EXA_FALLBACK_COPYWINDOW)
-+ if (pExaScr->fallback_counter ||
-+ (pExaScr->fallback_flags & EXA_FALLBACK_COPYWINDOW))
- return;
-
- if (exaHWCopyNtoN(pSrcDrawable, pDstDrawable, pGC, pbox, nbox, dx, dy, reverse, upsidedown))
-@@ -590,7 +592,7 @@ exaCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
- {
- ExaScreenPriv (pDstDrawable->pScreen);
-
-- if (pExaScr->swappedOut) {
-+ if (pExaScr->fallback_counter || pExaScr->swappedOut) {
- return ExaCheckCopyArea(pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height, dstx, dsty);
- }
-@@ -604,13 +606,14 @@ static void
- exaPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
- DDXPointPtr ppt)
- {
-+ ExaScreenPriv (pDrawable->pScreen);
- int i;
- xRectangle *prect;
-
- /* If we can't reuse the current GC as is, don't bother accelerating the
- * points.
- */
-- if (pGC->fillStyle != FillSolid) {
-+ if (pExaScr->fallback_counter || pGC->fillStyle != FillSolid) {
- ExaCheckPolyPoint(pDrawable, pGC, mode, npt, ppt);
- return;
- }
-@@ -639,10 +642,16 @@ static void
- exaPolylines(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
- DDXPointPtr ppt)
- {
-+ ExaScreenPriv (pDrawable->pScreen);
- xRectangle *prect;
- int x1, x2, y1, y2;
- int i;
-
-+ if (pExaScr->fallback_counter) {
-+ ExaCheckPolylines(pDrawable, pGC, mode, npt, ppt);
-+ return;
-+ }
-+
- /* Don't try to do wide lines or non-solid fill style. */
- if (pGC->lineWidth != 0 || pGC->lineStyle != LineSolid ||
- pGC->fillStyle != FillSolid) {
-@@ -700,12 +709,13 @@ static void
- exaPolySegment (DrawablePtr pDrawable, GCPtr pGC, int nseg,
- xSegment *pSeg)
- {
-+ ExaScreenPriv (pDrawable->pScreen);
- xRectangle *prect;
- int i;
-
- /* Don't try to do wide lines or non-solid fill style. */
-- if (pGC->lineWidth != 0 || pGC->lineStyle != LineSolid ||
-- pGC->fillStyle != FillSolid)
-+ if (pExaScr->fallback_counter || pGC->lineWidth != 0 ||
-+ pGC->lineStyle != LineSolid || pGC->fillStyle != FillSolid)
- {
- ExaCheckPolySegment(pDrawable, pGC, nseg, pSeg);
- return;
-@@ -782,7 +792,8 @@ exaPolyFillRect(DrawablePtr pDrawable,
-
- exaGetDrawableDeltas(pDrawable, pPixmap, &xoff, &yoff);
-
-- if (pExaScr->swappedOut || pExaPixmap->accel_blocked)
-+ if (pExaScr->fallback_counter || pExaScr->swappedOut ||
-+ pExaPixmap->accel_blocked)
- {
- goto fallback;
- }
-@@ -956,12 +967,18 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
- -pPixmap->screen_x, -pPixmap->screen_y);
- #endif
-
-+ if (pExaScr->fallback_counter) {
-+ pExaScr->fallback_flags |= EXA_FALLBACK_COPYWINDOW;
-+ goto fallback;
-+ }
-+
- pExaScr->fallback_flags |= EXA_ACCEL_COPYWINDOW;
- miCopyRegion (&pPixmap->drawable, &pPixmap->drawable,
- NULL,
- &rgnDst, dx, dy, exaCopyNtoN, 0, NULL);
- pExaScr->fallback_flags &= ~EXA_ACCEL_COPYWINDOW;
-
-+fallback:
- REGION_UNINIT(pWin->drawable.pScreen, &rgnDst);
-
- if (pExaScr->fallback_flags & EXA_FALLBACK_COPYWINDOW) {
-@@ -984,7 +1001,7 @@ exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion, Pixel pixel,
- exaGetDrawableDeltas(pDrawable, pPixmap, &xoff, &yoff);
- REGION_TRANSLATE(pScreen, pRegion, xoff, yoff);
-
-- if (pExaPixmap->accel_blocked)
-+ if (pExaScr->fallback_counter || pExaPixmap->accel_blocked)
- goto out;
-
- if (pExaScr->do_migration) {
-@@ -1080,7 +1097,8 @@ exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
- pPixmap = exaGetDrawablePixmap (pDrawable);
- pExaPixmap = ExaGetPixmapPriv (pPixmap);
-
-- if (pExaPixmap->accel_blocked || pTileExaPixmap->accel_blocked)
-+ if (pExaScr->fallback_counter || pExaPixmap->accel_blocked ||
-+ pTileExaPixmap->accel_blocked)
- return FALSE;
-
- if (pExaScr->do_migration) {
-@@ -1238,7 +1256,7 @@ exaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h,
- int xoff, yoff;
- Bool ok;
-
-- if (pExaScr->swappedOut)
-+ if (pExaScr->fallback_counter || pExaScr->swappedOut)
- goto fallback;
-
- exaGetDrawableDeltas (pDrawable, pPix, &xoff, &yoff);
-diff --git a/exa/exa_classic.c b/exa/exa_classic.c
-index 1eff570..12f3987 100644
---- a/exa/exa_classic.c
-+++ b/exa/exa_classic.c
-@@ -137,6 +137,10 @@ exaCreatePixmap_classic(ScreenPtr pScreen, int w, int h, int depth,
- exaSetAccelBlock(pExaScr, pExaPixmap,
- w, h, bpp);
-
-+ /* During a fallback we must prepare access. */
-+ if (pExaScr->fallback_counter)
-+ exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST);
-+
- return pPixmap;
- }
-
-@@ -216,6 +220,10 @@ exaDestroyPixmap_classic (PixmapPtr pPixmap)
- {
- ExaPixmapPriv (pPixmap);
-
-+ /* During a fallback we must finish access, but we don't know the index. */
-+ if (pExaScr->fallback_counter)
-+ exaFinishAccess(&pPixmap->drawable, -1);
-+
- if (pExaPixmap->area)
- {
- DBG_PIXMAP(("-- 0x%p (0x%x) (%dx%d)\n",
-diff --git a/exa/exa_driver.c b/exa/exa_driver.c
-index a9165a1..f55c300 100644
---- a/exa/exa_driver.c
-+++ b/exa/exa_driver.c
-@@ -115,6 +115,10 @@ exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth,
- exaSetAccelBlock(pExaScr, pExaPixmap,
- w, h, bpp);
-
-+ /* During a fallback we must prepare access. */
-+ if (pExaScr->fallback_counter)
-+ exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST);
-+
- return pPixmap;
- }
-
-@@ -187,6 +191,10 @@ exaDestroyPixmap_driver (PixmapPtr pPixmap)
- {
- ExaPixmapPriv (pPixmap);
-
-+ /* During a fallback we must finish access, but we don't know the index. */
-+ if (pExaScr->fallback_counter)
-+ exaFinishAccess(&pPixmap->drawable, -1);
-+
- if (pExaPixmap->driverPriv)
- pExaScr->info->DestroyPixmap(pScreen, pExaPixmap->driverPriv);
- pExaPixmap->driverPriv = NULL;
-diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
-index ff02f27..47adad7 100644
---- a/exa/exa_mixed.c
-+++ b/exa/exa_mixed.c
-@@ -97,6 +97,10 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
- } else
- pExaPixmap->offscreen = FALSE;
-
-+ /* During a fallback we must prepare access. */
-+ if (pExaScr->fallback_counter)
-+ exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST);
-+
- return pPixmap;
- }
-
-@@ -188,6 +192,10 @@ exaDestroyPixmap_mixed(PixmapPtr pPixmap)
- {
- ExaPixmapPriv (pPixmap);
-
-+ /* During a fallback we must finish access, but we don't know the index. */
-+ if (pExaScr->fallback_counter)
-+ exaFinishAccess(&pPixmap->drawable, -1);
-+
- if (pExaPixmap->driverPriv)
- pExaScr->info->DestroyPixmap(pScreen, pExaPixmap->driverPriv);
- pExaPixmap->driverPriv = NULL;
-diff --git a/exa/exa_priv.h b/exa/exa_priv.h
-index 1aec8e9..7d035d4 100644
---- a/exa/exa_priv.h
-+++ b/exa/exa_priv.h
-@@ -197,6 +197,7 @@ typedef struct {
-
- /* Holds information on fallbacks that cannot be relayed otherwise. */
- unsigned int fallback_flags;
-+ unsigned int fallback_counter;
-
- ExaGlyphCacheRec glyphCaches[EXA_NUM_GLYPH_CACHES];
- } ExaScreenPrivRec, *ExaScreenPrivPtr;
-@@ -240,13 +241,21 @@ extern DevPrivateKey exaGCPrivateKey;
- real->mem = tmp; \
- }
-
--#define EXA_GC_PROLOGUE(_gc_) \
-+#define EXA_PRE_FALLBACK(_screen_) \
-+ ExaScreenPriv(_screen_); \
-+ pExaScr->fallback_counter++;
-+
-+#define EXA_POST_FALLBACK(_screen_) \
-+ pExaScr->fallback_counter--;
-+
-+#define EXA_PRE_FALLBACK_GC(_gc_) \
-+ ExaScreenPriv(_gc_->pScreen); \
- ExaGCPriv(_gc_); \
-- swap(pExaGC, _gc_, funcs); \
-+ pExaScr->fallback_counter++; \
- swap(pExaGC, _gc_, ops);
-
--#define EXA_GC_EPILOGUE(_gc_) \
-- swap(pExaGC, _gc_, funcs); \
-+#define EXA_POST_FALLBACK_GC(_gc_) \
-+ pExaScr->fallback_counter--; \
- swap(pExaGC, _gc_, ops);
-
Reply to: