debian/changelog | 24 ++++ debian/local/xvfb-run | 32 +----- debian/patches/176_quell_warning_exacopydirty.patch | 13 ++ debian/patches/177_animated_cursor_change_master.patch | 89 +++++++++++++++++ debian/patches/series | 2 5 files changed, 135 insertions(+), 25 deletions(-)
New commits: commit e170094bc45119a7964c858a99f93d1a37468d69 Author: Bryce Harrington <br...@bryceharrington.org> Date: Wed Apr 8 18:53:57 2009 -0700 Fix crash with animated cursors, quell exaCopyDirty warnings, and revert xvfb-run change diff --git a/debian/changelog b/debian/changelog index 915558a..4080e81 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,27 @@ +xorg-server (2:1.6.0-0ubuntu14) jaunty; urgency=low + + * Add 177_animated_cursor_change_master.patch: Fixes crash when using + animated cursors. + (LP: #358009) + + -- Bryce Harrington <br...@ubuntu.com> Wed, 08 Apr 2009 18:52:56 -0700 + +xorg-server (2:1.6.0-0ubuntu13) jaunty; urgency=low + + * Add 176_quell_warning_exacopydirty.patch: Quells innocuous but scary + sounding "exaCopyDirty: Pending damage region empty!" warning, as it + can lead to false-positives with bug reporters. + + -- Bryce Harrington <br...@ubuntu.com> Wed, 08 Apr 2009 14:49:36 -0700 + +xorg-server (2:1.6.0-0ubuntu12) jaunty; urgency=low + + * local/xvfb-run: Revert change from 2:1.6.0-0ubuntu9; prevents running + multiple times. + (LP: #357338. Reopen 348052 rejecting patch) + + -- Bryce Harrington <br...@ubuntu.com> Tue, 07 Apr 2009 15:21:32 -0700 + xorg-server (2:1.6.0-0ubuntu11) jaunty; urgency=low * Add 175_set_pointer_screen_in_xtestfakeinput.patch: Fixes issue when diff --git a/debian/local/xvfb-run b/debian/local/xvfb-run index eb04037..3b3889c 100644 --- a/debian/local/xvfb-run +++ b/debian/local/xvfb-run @@ -110,7 +110,7 @@ eval set -- "$ARGS" while :; do case "$1" in - -a|--auto-servernum) SERVERNUM=$(find_free_servernum); AUTONUM="yes" ;; + -a|--auto-servernum) SERVERNUM=$(find_free_servernum) ;; -e|--error-file) ERRORFILE="$2"; shift ;; -f|--auth-file) AUTHFILE="$2"; shift ;; -h|--help) SHOWHELP="yes" ;; @@ -157,31 +157,13 @@ if [ -z "$AUTHFILE" ]; then fi # Start Xvfb -# Loop until we get a match between lock file contents and Xvfb PID -# (this avoids a race condition when another process starts an Xserver). -while true; do - MCOOKIE=$(mcookie) - XAUTHORITY=$AUTHFILE xauth add ":$SERVERNUM" "$XAUTHPROTO" "$MCOOKIE" \ - >>"$ERRORFILE" 2>&1 - XAUTHORITY=$AUTHFILE Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP \ - >>"$ERRORFILE" 2>&1 & - XVFBPID=$! - # Test PID of Xvfb and contents of the X server lock file - # (use numerical comparison to avoid whitespace issues). - # If the display was in use the Xvfb process will die on its own. - if [ "$XVFBPID" -eq "$(</tmp/.X${SERVERNUM}-lock)" ]; then - break - fi - # The display is in use so try another one (if '-a' was specified). - if [ "$AUTONUM" ]; then - SERVERNUM=$(find_free_servernum) - continue - fi - error "display :$SERVERNUM already in use" - exit 1 -done +MCOOKIE=$(mcookie) +XAUTHORITY=$AUTHFILE xauth add ":$SERVERNUM" "$XAUTHPROTO" "$MCOOKIE" \ + >"$ERRORFILE" 2>&1 +XAUTHORITY=$AUTHFILE Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP >"$ERRORFILE" \ + 2>&1 & +XVFBPID=$! -# Xvfb has started without any race conditions. sleep "$STARTWAIT" if ! kill -0 $XVFBPID 2>/dev/null; then echo "Xvfb failed to start" >&2 diff --git a/debian/patches/176_quell_warning_exacopydirty.patch b/debian/patches/176_quell_warning_exacopydirty.patch new file mode 100644 index 0000000..64f8e8a --- /dev/null +++ b/debian/patches/176_quell_warning_exacopydirty.patch @@ -0,0 +1,13 @@ +diff --git a/exa/exa_migration.c b/exa/exa_migration.c +index 571650c..733379f 100644 +--- a/exa/exa_migration.c ++++ b/exa/exa_migration.c +@@ -166,7 +166,7 @@ exaCopyDirty(ExaMigrationPtr migrate, RegionPtr pValidDst, RegionPtr pValidSrc, + static Bool firsttime = TRUE; + + if (firsttime) { +- ErrorF("%s: Pending damage region empty!\n", __func__); ++ /* ErrorF("%s: Pending damage region empty!\n", __func__); */ + firsttime = FALSE; + } + } diff --git a/debian/patches/177_animated_cursor_change_master.patch b/debian/patches/177_animated_cursor_change_master.patch new file mode 100644 index 0000000..e17f664 --- /dev/null +++ b/debian/patches/177_animated_cursor_change_master.patch @@ -0,0 +1,89 @@ +From 86c5c065a9348a1e5c1f3712fd13a0bdc10f7998 Mon Sep 17 00:00:00 2001 +From: Thomas Jaeger <thjae...@gmail.com> +Date: Tue, 6 Jan 2009 00:17:45 -0500 +Subject: [PATCH] Don't create animated cursors for slave devices + +Fixes bug #19034 + +See also https://lists.ubuntu.com/archives/ubuntu-x/2009-April/000495.html + +The issue is associated to slave device cursors, basically an artifact +of how the xserver-1.6 code is derived from master. There is no API to +access device cursors in 1.6, but it turns out that under certain +circumstances (I'm not exactly sure how this happens but it seems to be +some kind of race condition between XI and core grabs), it is possible +that a device cursor will be set anyway. If it's a regular cursor (that +is what the bug report was originally about), this is not a problem +anymore since this will just modify the core cursor, but if it's an +animated cursor, we're in trouble: The device cursor will keep +replacing the core cursor (so the user will notice an animated cursor +that shouldn't be there), and when the client destroys the animated +cursor, the device animated cursor will stay active leading to a server +crash the next time the cursor is updated. There is a patch attached to +the fdo bug report that fixes the issue by basically doing the same +thing for an animated cursor that we do for a regular cursor: Apply the +change to the associated master device. This is safe for 1.6 since this +code path should never be hit in the first place, but unfortunately, +this is not the direction that Peter wants to go for master where each +device has its own sprite (I'm not sure how things are supposed to work +with animated cursors there). + +The crash happens randomly when an application that grabs an Xi device +(such as easystroke) is running when clicking on firefox menus, but it's +fairly easy to reproduce reliably by setting up a timeout gesture in +easystroke to rotate the cube in compiz via Control+Shift+Button1 and +invoke the gesture when firefox is loading a page and showing a 'sandbox'. +--- + render/animcur.c | 18 +++++++++++------- + 1 files changed, 11 insertions(+), 7 deletions(-) + +diff --git a/render/animcur.c b/render/animcur.c +index d80094d..e117915 100644 +--- a/render/animcur.c ++++ b/render/animcur.c +@@ -230,11 +230,15 @@ AnimCurDisplayCursor (DeviceIntPtr pDev, + { + AnimCurScreenPtr as = GetAnimCurScreen(pScreen); + Bool ret; ++ DeviceIntPtr pMasterDev = pDev->isMaster ? pDev : pDev->u.master; ++ ++ if (!pMasterDev) ++ return FALSE; + + Unwrap (as, pScreen, DisplayCursor); + if (IsAnimCur(pCursor)) + { +- if (pCursor != animCurState[pDev->id].pCursor) ++ if (pCursor != animCurState[pMasterDev->id].pCursor) + { + AnimCurPtr ac = GetAnimCur(pCursor); + +@@ -242,10 +246,10 @@ AnimCurDisplayCursor (DeviceIntPtr pDev, + (pDev, pScreen, ac->elts[0].pCursor); + if (ret) + { +- animCurState[pDev->id].elt = 0; +- animCurState[pDev->id].time = GetTimeInMillis () + ac->elts[0].delay; +- animCurState[pDev->id].pCursor = pCursor; +- animCurState[pDev->id].pScreen = pScreen; ++ animCurState[pMasterDev->id].elt = 0; ++ animCurState[pMasterDev->id].time = GetTimeInMillis () + ac->elts[0].delay; ++ animCurState[pMasterDev->id].pCursor = pCursor; ++ animCurState[pMasterDev->id].pScreen = pScreen; + } + } + else +@@ -253,8 +257,8 @@ AnimCurDisplayCursor (DeviceIntPtr pDev, + } + else + { +- animCurState[pDev->id].pCursor = 0; +- animCurState[pDev->id].pScreen = 0; ++ animCurState[pMasterDev->id].pCursor = 0; ++ animCurState[pMasterDev->id].pScreen = 0; + ret = (*pScreen->DisplayCursor) (pDev, pScreen, pCursor); + } + Wrap (as, pScreen, DisplayCursor, AnimCurDisplayCursor); +-- +1.6.0.4 + diff --git a/debian/patches/series b/debian/patches/series index 814d73a..b714221 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -32,3 +32,5 @@ 174_set_bg_pixmap_of_cow_to_none.patch #999_default_modedebug_on.patch 175_set_pointer_screen_in_xtestfakeinput.patch +176_quell_warning_exacopydirty.patch +177_animated_cursor_change_master.patch -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org