From 207b5241380e07948ae5a674c0c98e3f23a27448 Mon Sep 17 00:00:00 2001 From: Aiden Jeffrey Date: Wed, 20 Nov 2024 12:32:48 +0000 Subject: [PATCH] cefsrc: Clean up CEF object refs We were never setting src->app, so I removed it from the struct... Also I added the BrowserClient to _GstCefSrc, so that I could try and ensure it is getting dereferenced. --- gstcefsrc.cc | 9 ++++++++- gstcefsrc.h | 5 +++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/gstcefsrc.cc b/gstcefsrc.cc index 09c514d..8cea7ab 100644 --- a/gstcefsrc.cc +++ b/gstcefsrc.cc @@ -15,7 +15,6 @@ #include #include #include -#include #include "gstcefsrc.h" #include "gstcefaudiometa.h" @@ -907,6 +906,7 @@ gst_cef_src_start(GstBaseSrc *base_src) GST_OBJECT_LOCK (src); src->n_frames = 0; + src->client = browserClient; GST_OBJECT_UNLOCK (src); GST_ELEMENT_PROGRESS(src, CONTINUE, "open", ("Creating CEF browser ...")); @@ -967,6 +967,8 @@ gst_cef_src_stop (GstBaseSrc *base_src) { GstCefSrc *src = GST_CEF_SRC (base_src); + GST_OBJECT_LOCK (src); + GST_INFO_OBJECT (src, "Stopping"); if (src->browser) { @@ -986,6 +988,8 @@ gst_cef_src_stop (GstBaseSrc *base_src) gst_buffer_replace (&src->current_buffer, NULL); + GST_OBJECT_UNLOCK (src); + return TRUE; } @@ -1236,6 +1240,9 @@ gst_cef_src_finalize (GObject *object) g_free (src->js_flags); g_free (src->cef_cache_location); + // free client + src->client->Release(); + g_cond_clear(&src->state_cond); g_mutex_clear(&src->state_lock); } diff --git a/gstcefsrc.h b/gstcefsrc.h index e7c46ee..8bd032f 100644 --- a/gstcefsrc.h +++ b/gstcefsrc.h @@ -2,6 +2,7 @@ #define __GST_CEF_SRC_H__ #include "include/cef_browser_process_handler.h" +#include "include/internal/cef_ptr.h" #include #include #include @@ -11,7 +12,7 @@ #include #include #include - +#include G_BEGIN_DECLS @@ -61,7 +62,7 @@ struct _GstCefSrc { gboolean listen_for_js_signals; gint chromium_debug_port; CefRefPtr browser; - CefRefPtr app; + CefRefPtr client; GCond state_cond; GMutex state_lock;