xserver: Branch 'master'

Matthias Hopf mhopf at kemper.freedesktop.org
Mon Sep 21 07:42:45 PDT 2009


 hw/xfree86/modes/xf86Cursors.c |   16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

New commits:
commit 977953bf14858d17c22208c848854ddbe7e86527
Author: Matthias Hopf <mhopf at suse.de>
Date:   Mon Sep 21 15:44:00 2009 +0200

    Less intrusive workaround for sporadic segfault on resume.
    
    Hopefully fixes fdo #24010 (memleak).

diff --git a/hw/xfree86/modes/xf86Cursors.c b/hw/xfree86/modes/xf86Cursors.c
index f4b8be5..3d2d633 100644
--- a/hw/xfree86/modes/xf86Cursors.c
+++ b/hw/xfree86/modes/xf86Cursors.c
@@ -461,10 +461,6 @@ xf86_use_hw_cursor (ScreenPtr screen, CursorPtr cursor)
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
     xf86CursorInfoPtr	cursor_info = xf86_config->cursor_info;
 
-    if (xf86_config->cursor == cursor) {
-	xf86DrvMsg(index, X_ERROR, "Trying to set already set cursor.\n");
-	return FALSE;
-    }
     if (xf86_config->cursor)
 	FreeCursor (xf86_config->cursor, None);
     xf86_config->cursor = cursor;
@@ -484,12 +480,14 @@ xf86_use_hw_cursor_argb (ScreenPtr screen, CursorPtr cursor)
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
     xf86CursorInfoPtr	cursor_info = xf86_config->cursor_info;
     
-    if (xf86_config->cursor == cursor) {
-	xf86DrvMsg(index, X_ERROR, "Trying to set already set cursor.\n");
-	return FALSE;
+    if (xf86_config->cursor) {
+	/* Under some circumstances an already set cursor is set again.
+	 * If the pointer is freed, ->bits is killed */
+	if (xf86_config->cursor != cursor)
+	    FreeCursor (xf86_config->cursor, None);
+	else
+	    --cursor->refcnt;
     }
-    if (xf86_config->cursor)
-	FreeCursor (xf86_config->cursor, None);
     xf86_config->cursor = cursor;
     ++cursor->refcnt;
     


More information about the xorg-commit mailing list