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 <jcris...@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 <daen...@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 <daen...@vmware.com> + Reviewed-by: Alex Deucher <alexdeuc...@gmail.com> + Signed-off-by: Keith Packard <kei...@keithp.com> + (cherry picked from commit 7b6517526631a65891b806bca30be8f49955d0a8) + +commit 7815b02e8d9636b6abbe1f7cb555a1069db2d59f +Author: Peter Hutterer <peter.hutte...@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.hutte...@who-t.net> + +commit ba2ba32e04f9002dbb60f10e174ac63d16e5f507 +Author: Peter Hutterer <peter.hutte...@who-t.net> +Date: Wed Apr 21 09:17:26 2010 +1000 + + xserver 1.7.6.902 + + Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> + +commit e8fae02f19d6d75ac3edbea2f5af8d250dcfbde3 +Author: Peter Hutterer <peter.hutte...@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.hutte...@who-t.net> + Reviewed-by: Keith Packard <kei...@keithp.com> + Signed-off-by: Keith Packard <kei...@keithp.com> + (cherry picked from commit 9ddbb03fa56aa73c3f417d8ee6433e45b94445b3) + +commit aa6a18fdebf444084c27e4a7f3eef7d93f9929b0 +Author: Cyril Brulebois <k...@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 <madman2...@gmail.com> + Acked-by: Michel Dänzer <mic...@daenzer.net> + Signed-off-by: Keith Packard <kei...@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.ma...@internode.on.net> + Signed-off-by: Cyril Brulebois <k...@debian.org> + Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> + +commit acbcb77bf6acf513660b4a9df8d20a5c04f1c865 +Author: Julien Cristau <jcris...@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 <jcris...@debian.org> + Reviewed-by: Peter Hutterer <peter.hutte...@who-t.net> + Signed-off-by: Keith Packard <kei...@keithp.com> + (cherry picked from commit fc5d76740851725e3788c68e14474a012a205892) + + Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> + +commit c52b9e143da294e787d93ddbd7b9b620a3a892e2 +Author: Julien Cristau <jcris...@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" <brl...@debian.org> + Signed-off-by: Julien Cristau <jcris...@debian.org> + Reviewed-by: Peter Hutterer <peter.hutte...@who-t.net> + Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> + (cherry picked from commit 0e7703f9b1927328954a2fc87aac6be244819329) + + Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> + +commit 9a9a19ac4ecdab0e2602d70354145545de37f3c5 +Author: Pierre-Loup A. Griffais <pgriff...@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 <pgriff...@nvidia.com> + Reviewed-by: Peter Hutterer <peter.hutte...@who-t.net> + Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> + (cherry picked from commit 00b8b7ad61b6f818271fb4d1e383113170309d72) + + Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> + +commit ff02e0e4a2f33131520bc3bf7d6621a301c5296d +Author: Tim Yamin <pl...@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 <pl...@roo.me.uk> + Reviewed-by: Peter Hutterer <peter.hutte...@who-t.net> + Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> + (cherry picked from commit 5f31e2196179f8db3170d65a17d8ad40da1acb0d) + + Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> + +commit 8616c5eb756aeb408545da5d186ad28909574dcb +Author: Jeremy Huddleston <jerem...@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 <jerem...@apple.com> + (cherry picked from commit 5b0faf355465c9f21ad96e0ed266fbdbc29efb5b) + +commit 0dd9d27eaacc02f968ce98749a1696189274a8f8 +Author: Jeremy Huddleston <jerem...@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 <jerem...@apple.com> + Reviewed-by: Marc Majka <ma...@apple.com> + (cherry picked from commit fe7778e58e099d353689755ed2f5aa440569ebe3) + +commit 3d7d699e3a024c870bca9cb0e1c922dbb87d5316 +Author: Jeremy Huddleston <jerem...@apple.com> +Date: Tue Apr 13 14:33:49 2010 -0700 + + XQuartz: Localization update + + Signed-off-by: Jeremy Huddleston <jerem...@apple.com> + (cherry picked from commit 206531f75cd41c034e89fdfbc75ab0910682eef8) + +commit e7ab6537c2745decb7143c5e4eb31440be262fd0 +Author: Jeremy Huddleston <jerem...@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 <jerem...@apple.com> + Reviewed-by: Kevin Van Vechten <k...@apple.com> + (cherry picked from commit 59edde7c28db2d3174a5813a0af334e4ead2082f) + +commit 30f4c7e4fb20f9d465e6a56db937c4af48885161 +Author: Jeremy Huddleston <jerem...@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 <jerem...@apple.com> + Reviewed-by: Kevin Van Vechten <k...@apple.com> + (cherry picked from commit 5600f7f001529b3afdee95546aec212a70d6a5b2) + +commit a75e4be03c7888a86a9b76de11e39ff8f9f7ac86 +Author: Jeremy Huddleston <jerem...@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 <jerem...@apple.com> + Reviewed-by: Kevin Van Vechten <k...@apple.com> + (cherry picked from commit 840d12c7a6ac6a974da185045215ce944a61fab6) + +commit af86a25009c337954f61475196a0092712cab1e1 +Author: Jeremy Huddleston <jerem...@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 <jerem...@apple.com> + Reviewed-by: Kevin Van Vechten <k...@apple.com> + (cherry picked from commit d6f160510a50d4c4eaa48c9c69a5ddda0d50052c) + commit 501c0ee63570da7501d047c51c40a2568af1df08 Author: Peter Hutterer <peter.hutte...@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 <tjaal...@ubuntu.com> Tue, 20 Apr 2010 17:46:32 +0300 + -- Julien Cristau <jcris...@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 <k...@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 <madman2...@gmail.com> -Acked-by: Michel Dänzer <mic...@daenzer.net> -Signed-off-by: Keith Packard <kei...@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.ma...@internode.on.net> -Signed-off-by: Cyril Brulebois <k...@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); - -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/e1o7qdb-000784...@alioth.debian.org