xserver-xorg-video-ati: Changes to 'ubuntu'
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 <christopher.halse.rogers@canonical.com>
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 <christopher.halse.rogers@canonical.com>
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 <raof@ubuntu.com> 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 <christopher.halse.rogers@canonical.com>
-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);
Reply to: