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