Added TI patches, generated from commit 04f9d72 of the following tree:
[ubuntu-omap:gst-plugins-bad1-0.git] / debian / patches / 0003-03-30-dri2videosink-fix-a-few-leaks-mostly-on-error.patch
1 From 31cad352b87c3e36ac635290bb8c187109027d38 Mon Sep 17 00:00:00 2001
2 From: Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
3 Date: Sun, 24 Jun 2012 13:53:34 +0000
4 Subject: [PATCH 003/100] [03/30] dri2videosink: fix a few leaks, mostly on
5  error
6
7 ---
8  sys/dri2/gstdri2util.c |   23 ++++++++++++++++-------
9  sys/dri2/gstdri2util.h |    2 ++
10  2 files changed, 18 insertions(+), 7 deletions(-)
11
12 diff --git a/sys/dri2/gstdri2util.c b/sys/dri2/gstdri2util.c
13 index 8190879..f117d6f 100644
14 --- a/sys/dri2/gstdri2util.c
15 +++ b/sys/dri2/gstdri2util.c
16 @@ -157,9 +157,8 @@ gst_dri2context_new (GstElement * elem)
17    Window root;
18    drm_magic_t magic;
19    int eventBase, errorBase, major, minor;
20 -  char *driver, *device;
21 -  unsigned int i, nformats, *formats;
22 -  int fd;
23 +  unsigned int i, nformats, *formats = NULL;
24 +  int fd = -1;
25  
26    dcontext = g_new0 (GstDRI2Context, 1);
27    dcontext->elem = elem;
28 @@ -191,15 +190,15 @@ gst_dri2context_new (GstElement * elem)
29        DefaultScreen (dcontext->x_display));
30  
31    if (!DRI2Connect (dcontext->x_display, root,
32 -      DRI2DriverXV, &driver, &device)) {
33 +      DRI2DriverXV, &dcontext->driver, &dcontext->device)) {
34      GST_ERROR_OBJECT (elem, "DRI2Connect failed");
35      goto fail;
36    }
37  
38    GST_DEBUG_OBJECT (elem, "DRI2Connect: driver=%s, device=%s",
39 -      driver, device);
40 +      dcontext->driver, dcontext->device);
41  
42 -  fd = open (device, O_RDWR);
43 +  fd = open (dcontext->device, O_RDWR);
44    if (fd < 0) {
45      GST_ERROR_OBJECT (elem, "open failed");
46      goto fail;
47 @@ -248,7 +247,14 @@ gst_dri2context_new (GstElement * elem)
48    return dcontext;
49  
50  fail:
51 -  /* XXX: release resources */
52 +  free(formats);
53 +  if (dcontext->dev)
54 +    omap_device_del (dcontext->dev);
55 +
56 +  /* TODO: the code in _delete uses drmClose, but the fd is from open(2) ?? */
57 +  if (fd >= 0)
58 +    drmClose (fd);
59 +
60    return NULL;
61  }
62  
63 @@ -268,6 +274,9 @@ gst_dri2context_delete (GstDRI2Context *dcontext)
64    omap_device_del (dcontext->dev);
65    drmClose (dcontext->drm_fd);
66  
67 +  XFree (dcontext->driver);
68 +  XFree (dcontext->device);
69 +
70    g_free (dcontext);
71  }
72  
73 diff --git a/sys/dri2/gstdri2util.h b/sys/dri2/gstdri2util.h
74 index c7d96fb..bfc4390 100644
75 --- a/sys/dri2/gstdri2util.h
76 +++ b/sys/dri2/gstdri2util.h
77 @@ -69,6 +69,8 @@ struct _GstDRI2Context
78    Display *x_display;
79    gint screen_num;
80    gulong black;
81 +  char *driver;
82 +  char *device;
83  
84    int drm_fd;
85    struct omap_device *dev;
86 -- 
87 1.7.9.5
88