]> git.pld-linux.org Git - packages/Mesa.git/commitdiff
fix dri3 crash on switching between GL apps auto/th/Mesa-17.3.1-2
authorJacek Konieczny <j.konieczny@eggsoft.pl>
Wed, 17 Jan 2018 12:17:38 +0000 (13:17 +0100)
committerJacek Konieczny <j.konieczny@eggsoft.pl>
Wed, 17 Jan 2018 12:17:38 +0000 (13:17 +0100)
Release: 2

Mesa.spec
dri3_crash_fix.patch [new file with mode: 0644]

index a5033163b06cd00bc9c512534e8f509370a1247d..05dad2d48b94523b08be3054a6931d66be50ca59 100644 (file)
--- a/Mesa.spec
+++ b/Mesa.spec
@@ -60,13 +60,14 @@ Summary:    Free OpenGL implementation
 Summary(pl.UTF-8):     Wolnodostępna implementacja standardu OpenGL
 Name:          Mesa
 Version:       17.3.1
-Release:       1
+Release:       2
 License:       MIT (core) and others - see license.html file
 Group:         X11/Libraries
 Source0:       ftp://ftp.freedesktop.org/pub/mesa/mesa-%{version}.tar.xz
 # Source0-md5: b4b021279ea21e1eb8a1369afa6f19a0
 Patch0:                %{name}-link.patch
 Patch1:                glvnd-fix-gl-dot-pc.patch
+Patch2:                dri3_crash_fix.patch
 URL:           http://www.mesa3d.org/
 BuildRequires: autoconf >= 2.60
 BuildRequires: automake
@@ -1267,6 +1268,7 @@ radv - eksperymentalny sterownik Vulkan dla GPU firmy AMD.
 %if %{with glvnd}
 %patch1 -p1
 %endif
+%patch2 -p1
 
 %build
 %{__libtoolize}
diff --git a/dri3_crash_fix.patch b/dri3_crash_fix.patch
new file mode 100644 (file)
index 0000000..618a466
--- /dev/null
@@ -0,0 +1,64 @@
+Upon reception of an event that lowered the number of active back buffers,
+the code would immediately try to free all back buffers with an id equal to or
+higher than the new number of active back buffers.
+
+However, that could lead to an active or to-be-active back buffer being freed,
+since the old number of back buffers was used when obtaining an idle back
+buffer for use.
+
+This lead to crashes when lowering the number of active back buffers by
+transitioning from page-flipping to non-page-flipping presents.
+
+Fix this by computing the number of active back buffers only when trying to
+obtain a new back buffer.
+
+Fixes: 15e208c4cc ("loader/dri3: Don't accidently free buffer holding new back content")
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104214
+Cc: "17.3" <mesa-stable@lists.freedesktop.org>
+Tested-by: Andriy.Khulap <andriy.khulap@globallogic.com>
+Tested-by: Vadym Shovkoplias <vadym.shovkoplias@globallogic.com>
+Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
+Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
+---
+ src/loader/loader_dri3_helper.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c
+index cc890bc..8f8efcb 100644
+--- a/src/loader/loader_dri3_helper.c
++++ b/src/loader/loader_dri3_helper.c
+@@ -205,7 +205,6 @@ void
+ loader_dri3_set_swap_interval(struct loader_dri3_drawable *draw, int interval)
+ {
+    draw->swap_interval = interval;
+-   dri3_update_num_back(draw);
+ }
+ /** dri3_free_render_buffer
+@@ -377,7 +376,6 @@ dri3_handle_present_event(struct loader_dri3_drawable *draw,
+             draw->flipping = false;
+             break;
+          }
+-         dri3_update_num_back(draw);
+          if (draw->vtable->show_fps)
+             draw->vtable->show_fps(draw, ce->ust);
+@@ -402,7 +400,8 @@ dri3_handle_present_event(struct loader_dri3_drawable *draw,
+             buf->busy = 0;
+          if (buf && draw->num_back <= b && b < LOADER_DRI3_MAX_BACK &&
+-             draw->cur_blit_source != b) {
++             draw->cur_blit_source != b &&
++             !buf->busy) {
+             dri3_free_render_buffer(draw, buf);
+             draw->buffers[b] = NULL;
+          }
+@@ -537,6 +536,7 @@ dri3_find_back(struct loader_dri3_drawable *draw)
+    /* Check whether we need to reuse the current back buffer as new back.
+     * In that case, wait until it's not busy anymore.
+     */
++   dri3_update_num_back(draw);
+    num_to_consider = draw->num_back;
+    if (!loader_dri3_have_image_blit(draw) && draw->cur_blit_source != -1) {
+       num_to_consider = 1;
+
This page took 0.062085 seconds and 4 git commands to generate.