summaryrefslogtreecommitdiff
path: root/subprojects/gst-plugins-good/sys/v4l2/gstv4l2deviceprovider.c
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/gst-plugins-good/sys/v4l2/gstv4l2deviceprovider.c')
-rw-r--r--subprojects/gst-plugins-good/sys/v4l2/gstv4l2deviceprovider.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/subprojects/gst-plugins-good/sys/v4l2/gstv4l2deviceprovider.c b/subprojects/gst-plugins-good/sys/v4l2/gstv4l2deviceprovider.c
index 7c2c87fea3..5eeec7dc8b 100644
--- a/subprojects/gst-plugins-good/sys/v4l2/gstv4l2deviceprovider.c
+++ b/subprojects/gst-plugins-good/sys/v4l2/gstv4l2deviceprovider.c
@@ -369,6 +369,8 @@ provider_thread (gpointer data)
if (context == NULL || loop == NULL) {
provider->started = TRUE;
g_cond_broadcast (&provider->started_cond);
+ g_clear_pointer (&loop, g_main_loop_unref);
+ g_clear_pointer (&context, g_main_context_unref);
GST_OBJECT_UNLOCK (provider);
return NULL;
}
@@ -451,19 +453,24 @@ gst_v4l2_device_provider_stop (GstDeviceProvider * provider)
self->loop = NULL;
GST_OBJECT_UNLOCK (self);
- if (!context || !loop)
+ if (!context || !loop) {
+ g_clear_pointer (&self->loop, g_main_loop_unref);
+ g_clear_pointer (&self->context, g_main_context_unref);
return;
+ }
idle_stop_source = g_idle_source_new ();
g_source_set_callback (idle_stop_source, (GSourceFunc) g_main_loop_quit, loop,
- (GDestroyNotify) g_main_loop_unref);
+ NULL);
g_source_attach (idle_stop_source, context);
g_source_unref (idle_stop_source);
- g_main_context_unref (context);
g_thread_join (self->thread);
self->thread = NULL;
self->started = FALSE;
+
+ g_main_loop_unref (loop);
+ g_main_context_unref (context);
}
#endif