From cb4792a8e58ff8c2b2035ee19999f92b663645c7 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Thu, 18 Jul 2013 11:49:54 -0400 Subject: [PATCH] qa-monitor: Add a target name field that can be used even when the target is freed --- validate/gst/qa/gst-qa-monitor.c | 24 ++++++++++++++++++++++++ validate/gst/qa/gst-qa-monitor.h | 4 ++++ 2 files changed, 28 insertions(+) diff --git a/validate/gst/qa/gst-qa-monitor.c b/validate/gst/qa/gst-qa-monitor.c index 5e619cc5af..911e2889b2 100644 --- a/validate/gst/qa/gst-qa-monitor.c +++ b/validate/gst/qa/gst-qa-monitor.c @@ -79,6 +79,16 @@ gst_qa_monitor_dispose (GObject * object) G_OBJECT_CLASS (parent_class)->dispose (object); } +static void +gst_qa_monitor_finalize (GObject * object) +{ + GstQaMonitor *monitor = GST_QA_MONITOR_CAST (object); + + gst_qa_monitor_set_target_name (monitor, NULL); + + G_OBJECT_CLASS (parent_class)->dispose (object); +} + static void gst_qa_monitor_class_init (GstQaMonitorClass * klass) { @@ -89,6 +99,7 @@ gst_qa_monitor_class_init (GstQaMonitorClass * klass) gobject_class->get_property = gst_qa_monitor_get_property; gobject_class->set_property = gst_qa_monitor_set_property; gobject_class->dispose = gst_qa_monitor_dispose; + gobject_class->finalize = gst_qa_monitor_finalize; gobject_class->constructor = gst_qa_monitor_constructor; klass->setup = gst_qa_monitor_do_setup; @@ -173,6 +184,10 @@ gst_qa_monitor_set_property (GObject * object, guint prop_id, monitor->target = g_value_get_object (value); g_object_weak_ref (G_OBJECT (monitor->target), (GWeakNotify) _target_freed_cb, monitor); + + if (monitor->target) + gst_qa_monitor_set_target_name (monitor, g_strdup + (GST_OBJECT_NAME (monitor->target))); break; case PROP_RUNNER: /* we assume the runner is valid as long as this monitor is, @@ -249,3 +264,12 @@ gst_qa_monitor_do_report (GstQaMonitor * monitor, var_args); va_end (var_args); } + +void +gst_qa_monitor_set_target_name (GstQaMonitor * monitor, gchar * target_name) +{ + if (monitor->target_name) + g_free (monitor->target_name); + + monitor->target_name = target_name; +} diff --git a/validate/gst/qa/gst-qa-monitor.h b/validate/gst/qa/gst-qa-monitor.h index 7255b44135..94f92a0879 100644 --- a/validate/gst/qa/gst-qa-monitor.h +++ b/validate/gst/qa/gst-qa-monitor.h @@ -125,6 +125,7 @@ struct _GstQaMonitor { GstObject *target; GMutex mutex; + gchar *target_name; GstQaMonitor *parent; @@ -157,6 +158,9 @@ void gst_qa_monitor_do_report_valist (GstQaMonitor * monitor, gint subarea, const gchar *format, va_list var_args); +void gst_qa_monitor_set_target_name (GstQaMonitor *monitor, + gchar *target_name); + G_END_DECLS #endif /* __GST_QA_MONITOR_H__ */