[PATCH] Fix nouveau_pipe_create() / nouveau_context_init(): raise an error if the screen/pipe creation failed

Victor Stinner victor.stinner at haypocalc.com
Fri Mar 6 04:52:19 PST 2009


---
 .../winsys/drm/nouveau/common/nouveau_context.c    |    6 ++++--
 .../winsys/drm/nouveau/common/nouveau_winsys.c     |    7 ++++++-
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/gallium/winsys/drm/nouveau/common/nouveau_context.c b/src/gallium/winsys/drm/nouveau/common/nouveau_context.c
index 25c9845..d9321ea 100644
--- a/src/gallium/winsys/drm/nouveau/common/nouveau_context.c
+++ b/src/gallium/winsys/drm/nouveau/common/nouveau_context.c
@@ -132,8 +132,10 @@ nouveau_context_init(struct nouveau_screen *nv_screen,
 		struct pipe_screen *pscreen;
 
 		pipe = nouveau_pipe_create(nv);
-		if (!pipe)
+		if (!pipe) {
 			NOUVEAU_ERR("Couldn't create hw pipe\n");
+			return 1;
+		}
 		pscreen = nvc->pscreen;
 
 		nv->cap.hw_vertex_buffer =
@@ -199,7 +201,7 @@ nouveau_context_cleanup(struct nouveau_context *nv)
 			nv->nv_screen->nvc = NULL;
 		}
 	}
-	
+
 	/* XXX: Who cleans up the pipe? */
 }
 
diff --git a/src/gallium/winsys/drm/nouveau/common/nouveau_winsys.c b/src/gallium/winsys/drm/nouveau/common/nouveau_winsys.c
index b6199f8..52c3b02 100644
--- a/src/gallium/winsys/drm/nouveau/common/nouveau_winsys.c
+++ b/src/gallium/winsys/drm/nouveau/common/nouveau_winsys.c
@@ -133,8 +133,13 @@ nouveau_pipe_create(struct nouveau_context *nv)
 
 	ws = nouveau_create_pipe_winsys(nv);
 
-	if (!nvc->pscreen)
+	if (!nvc->pscreen) {
 		nvc->pscreen = hws_create(ws, nvws);
+		if (!nvc->pscreen) {
+			NOUVEAU_ERR("Couldn't create hw screen\n");
+			return NULL;
+		}
+	}
 	nvc->pctx[nv->pctx_id] = hw_create(nvc->pscreen, nv->pctx_id);
 	return nvc->pctx[nv->pctx_id];
 }
-- 
1.5.6.3


--------------020306070001090004020404--


More information about the Nouveau mailing list