Mesa (10.2): st/xa: Don't close the drm fd on failure v2
Carl Worth
cworth at kemper.freedesktop.org
Fri Jul 4 04:07:36 UTC 2014
Module: Mesa
Branch: 10.2
Commit: ff02e7995c09278be06c34d596d3d8ca11e26ded
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ff02e7995c09278be06c34d596d3d8ca11e26ded
Author: Thomas Hellstrom <thellstrom at vmware.com>
Date: Thu Jul 3 02:07:36 2014 -0700
st/xa: Don't close the drm fd on failure v2
If XA fails to initialize with pipe_loader enabled, the pipe_loader's
cleanup function will close the drm file descriptor. That's pretty bad
because the file descriptor will probably be the X server driver's only
connection to drm. Temporarily solve this by dup()'ing the file descriptor
before handing it over to the pipe loader.
This fixes freedesktop.org bugzilla bug #80645.
v2: Fix CC addresses.
Cc: "10.2" <mesa-stable at lists.freedesktop.org>
Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
Reviewed-by: Jakob Bornecrantz <jakob at vmware.com>
(cherry picked from commit 35cf3831d71770211f29da6608313dc1f6213d7b)
Conflicts:
src/gallium/state_trackers/xa/xa_tracker.c
---
src/gallium/state_trackers/xa/xa_tracker.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/gallium/state_trackers/xa/xa_tracker.c b/src/gallium/state_trackers/xa/xa_tracker.c
index 9add584..be16964 100644
--- a/src/gallium/state_trackers/xa/xa_tracker.c
+++ b/src/gallium/state_trackers/xa/xa_tracker.c
@@ -26,6 +26,7 @@
* Thomas Hellstrom <thellstrom-at-vmware-dot-com>
*/
+#include <unistd.h>
#include "xa_tracker.h"
#include "xa_priv.h"
#include "pipe/p_state.h"
@@ -140,11 +141,15 @@ xa_tracker_create(int drm_fd)
struct xa_tracker *xa = calloc(1, sizeof(struct xa_tracker));
enum xa_surface_type stype;
unsigned int num_formats;
+ int loader_fd;
if (!xa)
return NULL;
- if (pipe_loader_drm_probe_fd(&xa->dev, drm_fd, false))
+ loader_fd = dup(drm_fd);
+ if (loader_fd == -1)
+ return NULL;
+ if (pipe_loader_drm_probe_fd(&xa->dev, loader_fd, false))
xa->screen = pipe_loader_create_screen(xa->dev, PIPE_SEARCH_DIR);
if (!xa->screen)
goto out_no_screen;
More information about the mesa-commit
mailing list