xf86-video-intel: 2 commits - src/sna/sna_video.c src/sna/sna_video_overlay.c src/sna/sna_video_textured.c

Chris Wilson ickle at kemper.freedesktop.org
Wed Jun 12 06:35:19 PDT 2013


 src/sna/sna_video.c          |   15 ++++++++++++++-
 src/sna/sna_video_overlay.c  |    1 -
 src/sna/sna_video_textured.c |    9 ++++++---
 3 files changed, 20 insertions(+), 5 deletions(-)

New commits:
commit 1f180b89db412c5fa9fe95c8f6634be33a1d8581
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Jun 12 14:23:32 2013 +0100

    sna/video: Free the private video (adaptor/port) arrays upon CloseScreen
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_video.c b/src/sna/sna_video.c
index 6591c62..833e6f2 100644
--- a/src/sna/sna_video.c
+++ b/src/sna/sna_video.c
@@ -606,8 +606,21 @@ sna_xv_query_adaptors(ScreenPtr screen,
 }
 
 static Bool
-sna_xv_close_screen(ScreenPtr screen)
+sna_xv_close_screen(CLOSE_SCREEN_ARGS_DECL)
 {
+	struct sna *sna = to_sna_from_screen(screen);
+	int i;
+
+	for (i = 0; i < sna->xv.num_adaptors; i++) {
+		free(sna->xv.adaptors[i].pPorts->devPriv.ptr);
+		free(sna->xv.adaptors[i].pPorts);
+		free(sna->xv.adaptors[i].pEncodings);
+	}
+	free(sna->xv.adaptors);
+
+	sna->xv.adaptors = NULL;
+	sna->xv.num_adaptors = 0;
+
 	return TRUE;
 }
 
commit 04ea469d4f30f9bb25561f3d04f1463999c8d928
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Jun 12 14:20:10 2013 +0100

    sna/video: Catch allocation failure whilst setting up the TexturedAdaptor
    
    Missing NULL check for calloc of the port private array.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_video_overlay.c b/src/sna/sna_video_overlay.c
index 5ec9c17..848c471 100644
--- a/src/sna/sna_video_overlay.c
+++ b/src/sna/sna_video_overlay.c
@@ -737,7 +737,6 @@ void sna_video_overlay_setup(struct sna *sna, ScreenPtr screen)
 
 	adaptor->nPorts = 1;
 	adaptor->pPorts = port;
-
 	adaptor->base_id = port->id = FakeClientID(0);
 	AddResource(port->id, XvGetRTPort(), port);
 
diff --git a/src/sna/sna_video_textured.c b/src/sna/sna_video_textured.c
index b9ccec0..cd5300f 100644
--- a/src/sna/sna_video_textured.c
+++ b/src/sna/sna_video_textured.c
@@ -350,11 +350,15 @@ void sna_video_textured_setup(struct sna *sna, ScreenPtr screen)
 		return;
 
 	video = calloc(nports, sizeof(struct sna_video));
-	if ( video == NULL) {
+	adaptor->pPorts = calloc(nports, sizeof(XvPortRec));
+	if (video == NULL || adaptor->pPorts == NULL) {
+		free(video);
+		free(adaptor->pPorts);
 		sna->xv.num_adaptors--;
 		return;
 	}
 
+
 	adaptor->type = XvInputMask | XvImageMask;
 	adaptor->pScreen = screen;
 	adaptor->name = "Intel(R) Textured Video";
@@ -387,8 +391,6 @@ void sna_video_textured_setup(struct sna *sna, ScreenPtr screen)
 	adaptor->ddPutImage = sna_video_textured_put_image;
 	adaptor->ddQueryImageAttributes = sna_video_textured_query;
 
-	adaptor->nPorts = nports;
-	adaptor->pPorts = calloc(nports, sizeof(XvPortRec));
 	for (i = 0; i < nports; i++) {
 		struct sna_video *v = &video[i];
 		XvPortPtr port = &adaptor->pPorts[i];
@@ -413,6 +415,7 @@ void sna_video_textured_setup(struct sna *sna, ScreenPtr screen)
 		port->devPriv.ptr = v;
 	}
 	adaptor->base_id = adaptor->pPorts[0].id;
+	adaptor->nPorts = nports;
 
 	xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");
 	xvContrast = MAKE_ATOM("XV_CONTRAST");


More information about the xorg-commit mailing list