summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Pablo Ugarte <ugarte@endlessm.com>2017-02-10 10:32:57 -0300
committerNicolas Dufresne <nicolas.dufresne@collabora.com>2017-02-21 16:48:47 -0500
commit7f554fcf739cea4e70a16f57d558a590200bea66 (patch)
treed5dcb5030c19ca5fc8df8959aeaef7772dac447c
parent3c911b5a6ba8d3e69240ec72a892afc36f40e923 (diff)
downloadgstreamer-plugins-good-7f554fcf739cea4e70a16f57d558a590200bea66.tar.gz
v4l2object: mark singleton caps as "may be leaked" objects.
Set MAY_BE_LEAKED flag on static pads returned by gst_v4l2_object_get_*_caps() functions. Made functions thread safe by using g_once_init[enter|leave] funtions. https://bugzilla.gnome.org/show_bug.cgi?id=778453
-rw-r--r--sys/v4l2/gstv4l2object.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c
index fa17ffa9e..8a5a37a3e 100644
--- a/sys/v4l2/gstv4l2object.c
+++ b/sys/v4l2/gstv4l2object.c
@@ -1577,10 +1577,13 @@ gst_v4l2_object_get_all_caps (void)
{
static GstCaps *caps = NULL;
- if (caps == NULL)
- caps = gst_v4l2_object_get_caps_helper (GST_V4L2_ALL);
+ if (g_once_init_enter (&caps)) {
+ GstCaps *all_caps = gst_v4l2_object_get_caps_helper (GST_V4L2_ALL);
+ GST_MINI_OBJECT_FLAG_SET (all_caps, GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED);
+ g_once_init_leave (&caps, all_caps);
+ }
- return gst_caps_ref (caps);
+ return caps;
}
GstCaps *
@@ -1588,10 +1591,13 @@ gst_v4l2_object_get_raw_caps (void)
{
static GstCaps *caps = NULL;
- if (caps == NULL)
- caps = gst_v4l2_object_get_caps_helper (GST_V4L2_RAW);
+ if (g_once_init_enter (&caps)) {
+ GstCaps *raw_caps = gst_v4l2_object_get_caps_helper (GST_V4L2_RAW);
+ GST_MINI_OBJECT_FLAG_SET (raw_caps, GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED);
+ g_once_init_leave (&caps, raw_caps);
+ }
- return gst_caps_ref (caps);
+ return caps;
}
GstCaps *
@@ -1599,10 +1605,13 @@ gst_v4l2_object_get_codec_caps (void)
{
static GstCaps *caps = NULL;
- if (caps == NULL)
- caps = gst_v4l2_object_get_caps_helper (GST_V4L2_CODEC);
+ if (g_once_init_enter (&caps)) {
+ GstCaps *codec_caps = gst_v4l2_object_get_caps_helper (GST_V4L2_CODEC);
+ GST_MINI_OBJECT_FLAG_SET (codec_caps, GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED);
+ g_once_init_leave (&caps, codec_caps);
+ }
- return gst_caps_ref (caps);
+ return caps;
}
/* collect data for the given caps