[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xorg-server: Changes to 'ubuntu'



 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 <bryce@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 <bryce@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 <bryce@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 <bryce@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 <ThJaeger@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


Reply to: