debian/changelog | 8 +++++ debian/patches/101_ref-count-dri2-buffers.patch | 38 ++++++++++++------------ 2 files changed, 27 insertions(+), 19 deletions(-)
New commits: commit 8df3d21d60fb263c99126d332654f0e607f341a8 Author: Christopher James Halse Rogers <[email protected]> Date: Thu Aug 26 15:44:45 2010 +1000 Finilise changelog diff --git a/debian/changelog b/debian/changelog index 8d5bd68..b9fad69 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -xserver-xorg-video-ati (1:6.13.1-1ubuntu4) UNRELEASED; urgency=low +xserver-xorg-video-ati (1:6.13.1-1ubuntu4) maverick; urgency=low * debian/patches/101_ref-count-dri2-buffers.patch: + Fix Xserver crash when scheduling a swap on an offscreen Drawable, commit 75a621e46c21a016885afba15cff4a70572afeaa Author: Christopher James Halse Rogers <[email protected]> Date: Thu Aug 26 15:42:26 2010 +1000 Fix ref-count-dri2-buffers patch to not kill the server when swapping buffers of offscreen Drawables diff --git a/debian/changelog b/debian/changelog index 04358cd..8d5bd68 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +xserver-xorg-video-ati (1:6.13.1-1ubuntu4) UNRELEASED; urgency=low + + * debian/patches/101_ref-count-dri2-buffers.patch: + + Fix Xserver crash when scheduling a swap on an offscreen Drawable, + most easily triggered by some Wine apps + + -- Christopher James Halse Rogers <[email protected]> Thu, 26 Aug 2010 13:03:36 +1000 + xserver-xorg-video-ati (1:6.13.1-1ubuntu3) maverick; urgency=low * debian/rules: diff --git a/debian/patches/101_ref-count-dri2-buffers.patch b/debian/patches/101_ref-count-dri2-buffers.patch index b7f8e92..8701aa8 100644 --- a/debian/patches/101_ref-count-dri2-buffers.patch +++ b/debian/patches/101_ref-count-dri2-buffers.patch @@ -17,11 +17,11 @@ Date: Tue Aug 17 12:13:09 2010 +1000 Fixes: http://bugs.freedesktop.org/show_bug.cgi?id=29065 Signed-off-by: Christopher James Halse Rogers <[email protected]> -diff --git a/src/radeon_dri2.c b/src/radeon_dri2.c -index 6356711..00b5712 100644 ---- a/src/radeon_dri2.c -+++ b/src/radeon_dri2.c -@@ -55,6 +55,7 @@ typedef DRI2Buffer2Ptr BufferPtr; +Index: xserver-xorg-video-ati/src/radeon_dri2.c +=================================================================== +--- xserver-xorg-video-ati.orig/src/radeon_dri2.c 2010-08-26 12:58:57.886218003 +1000 ++++ xserver-xorg-video-ati/src/radeon_dri2.c 2010-08-26 12:59:46.000000000 +1000 +@@ -55,6 +55,7 @@ struct dri2_buffer_priv { PixmapPtr pixmap; unsigned int attachment; @@ -29,7 +29,7 @@ index 6356711..00b5712 100644 }; -@@ -236,6 +237,7 @@ radeon_dri2_create_buffer(DrawablePtr drawable, +@@ -220,6 +221,7 @@ buffers->flags = 0; /* not tiled */ privates->pixmap = pixmap; privates->attachment = attachment; @@ -37,7 +37,7 @@ index 6356711..00b5712 100644 return buffers; } -@@ -267,13 +269,26 @@ radeon_dri2_destroy_buffer(DrawablePtr drawable, BufferPtr buffers) +@@ -251,13 +253,26 @@ if(buffers) { ScreenPtr pScreen = drawable->pScreen; @@ -52,7 +52,7 @@ index 6356711..00b5712 100644 - free(buffers->driverPrivate); - free(buffers); -+ xf86DrvMsg(scrn->scrnIndex, X_WARNING, ++ xf86DrvMsg(scrn->scrnIndex, X_WARNING, + "Attempted to destroy previously destroyed buffer.\ + This is a programming error\n"); + return; @@ -69,7 +69,7 @@ index 6356711..00b5712 100644 } } #endif -@@ -364,6 +379,20 @@ typedef struct _DRI2FrameEvent { +@@ -348,6 +363,20 @@ DRI2BufferPtr back; } DRI2FrameEventRec, *DRI2FrameEventPtr; @@ -90,7 +90,7 @@ index 6356711..00b5712 100644 void radeon_dri2_frame_event_handler(unsigned int frame, unsigned int tv_sec, unsigned int tv_usec, void *event_data) { -@@ -379,6 +408,8 @@ void radeon_dri2_frame_event_handler(unsigned int frame, unsigned int tv_sec, +@@ -363,6 +392,8 @@ status = dixLookupDrawable(&drawable, event->drawable_id, serverClient, M_ANY, DixWriteAccess); if (status != Success) { @@ -99,7 +99,7 @@ index 6356711..00b5712 100644 free(event); return; } -@@ -410,6 +441,8 @@ void radeon_dri2_frame_event_handler(unsigned int frame, unsigned int tv_sec, +@@ -394,6 +425,8 @@ break; } @@ -108,21 +108,21 @@ index 6356711..00b5712 100644 free(event); } -@@ -645,6 +678,13 @@ static int radeon_dri2_schedule_swap(ClientPtr client, DrawablePtr draw, - swap_info->front = front; - swap_info->back = back; +@@ -618,6 +651,13 @@ + + swap_info = calloc(1, sizeof(DRI2FrameEventRec)); + /* radeon_dri2_frame_event_handler will get called some unknown time in the + * future with these buffers. Take a reference to ensure that they won't -+ * get destroyed before then. ++ * get destroyed before then. + */ + radeon_dri2_ref_buffer(front); + radeon_dri2_ref_buffer(back); + - /* Get current count */ - vbl.request.type = DRM_VBLANK_RELATIVE; - if (crtc > 0) -@@ -768,6 +808,10 @@ blit_fallback: + /* Drawable not displayed... just complete the swap */ + if (crtc == -1 || !swap_info) + goto blit_fallback; +@@ -752,6 +792,10 @@ DRI2SwapComplete(client, draw, 0, 0, 0, DRI2_BLIT_COMPLETE, func, data); if (swap_info) free(swap_info); -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: http://lists.debian.org/[email protected]

