From fcc76e3d078d8490b89a41d4626c640d2d262364 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 30 May 2005 16:28:41 +0000 Subject: [PATCH] gst/elements/gstidentity.c: Protect last_message property as it is accessed from multiple threads. Original commit message from CVS: * gst/elements/gstidentity.c: (gst_identity_event), (gst_identity_transform), (gst_identity_get_property): Protect last_message property as it is accessed from multiple threads. --- ChangeLog | 7 +++++++ gst/elements/gstidentity.c | 8 ++++++++ plugins/elements/gstidentity.c | 8 ++++++++ 3 files changed, 23 insertions(+) diff --git a/ChangeLog b/ChangeLog index 3d874df..9432c9b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2005-05-30 Wim Taymans + * gst/elements/gstidentity.c: (gst_identity_event), + (gst_identity_transform), (gst_identity_get_property): + Protect last_message property as it is accessed from + multiple threads. + +2005-05-30 Wim Taymans + * gst/gstelement.c: (gst_element_init), (gst_element_pads_activate), (gst_element_change_state): Slicker pad activation code. diff --git a/gst/elements/gstidentity.c b/gst/elements/gstidentity.c index b73a287..37c42de 100644 --- a/gst/elements/gstidentity.c +++ b/gst/elements/gstidentity.c @@ -215,11 +215,13 @@ gst_identity_event (GstBaseTransform * trans, GstEvent * event) identity = GST_IDENTITY (trans); if (!identity->silent) { + GST_LOCK (identity); g_free (identity->last_message); identity->last_message = g_strdup_printf ("chain ******* (%s:%s)E (type: %d) %p", GST_DEBUG_PAD_NAME (trans->sinkpad), GST_EVENT_TYPE (event), event); + GST_UNLOCK (identity); g_object_notify (G_OBJECT (identity), "last_message"); } @@ -285,6 +287,7 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, if (identity->drop_probability > 0.0) { if ((gfloat) (1.0 * rand () / (RAND_MAX)) < identity->drop_probability) { + GST_LOCK (identity); g_free (identity->last_message); identity->last_message = g_strdup_printf ("dropping ******* (%s:%s)i (%d bytes, timestamp: %" @@ -295,6 +298,7 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, GST_TIME_ARGS (GST_BUFFER_DURATION (inbuf)), GST_BUFFER_OFFSET (inbuf), GST_BUFFER_OFFSET_END (inbuf), GST_BUFFER_FLAGS (inbuf), inbuf); + GST_UNLOCK (identity); g_object_notify (G_OBJECT (identity), "last-message"); return GST_FLOW_OK; } @@ -308,6 +312,7 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, GstClockTime time; if (!identity->silent) { + GST_LOCK (identity); g_free (identity->last_message); identity->last_message = g_strdup_printf ("chain ******* (%s:%s)i (%d bytes, timestamp: %" @@ -318,6 +323,7 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, GST_TIME_ARGS (GST_BUFFER_DURATION (inbuf)), GST_BUFFER_OFFSET (inbuf), GST_BUFFER_OFFSET_END (inbuf), GST_BUFFER_FLAGS (inbuf), inbuf); + GST_UNLOCK (identity); g_object_notify (G_OBJECT (identity), "last-message"); } @@ -428,7 +434,9 @@ gst_identity_get_property (GObject * object, guint prop_id, GValue * value, g_value_set_boolean (value, identity->dump); break; case PROP_LAST_MESSAGE: + GST_LOCK (identity); g_value_set_string (value, identity->last_message); + GST_UNLOCK (identity); break; case PROP_SYNC: g_value_set_boolean (value, identity->sync); diff --git a/plugins/elements/gstidentity.c b/plugins/elements/gstidentity.c index b73a287..37c42de 100644 --- a/plugins/elements/gstidentity.c +++ b/plugins/elements/gstidentity.c @@ -215,11 +215,13 @@ gst_identity_event (GstBaseTransform * trans, GstEvent * event) identity = GST_IDENTITY (trans); if (!identity->silent) { + GST_LOCK (identity); g_free (identity->last_message); identity->last_message = g_strdup_printf ("chain ******* (%s:%s)E (type: %d) %p", GST_DEBUG_PAD_NAME (trans->sinkpad), GST_EVENT_TYPE (event), event); + GST_UNLOCK (identity); g_object_notify (G_OBJECT (identity), "last_message"); } @@ -285,6 +287,7 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, if (identity->drop_probability > 0.0) { if ((gfloat) (1.0 * rand () / (RAND_MAX)) < identity->drop_probability) { + GST_LOCK (identity); g_free (identity->last_message); identity->last_message = g_strdup_printf ("dropping ******* (%s:%s)i (%d bytes, timestamp: %" @@ -295,6 +298,7 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, GST_TIME_ARGS (GST_BUFFER_DURATION (inbuf)), GST_BUFFER_OFFSET (inbuf), GST_BUFFER_OFFSET_END (inbuf), GST_BUFFER_FLAGS (inbuf), inbuf); + GST_UNLOCK (identity); g_object_notify (G_OBJECT (identity), "last-message"); return GST_FLOW_OK; } @@ -308,6 +312,7 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, GstClockTime time; if (!identity->silent) { + GST_LOCK (identity); g_free (identity->last_message); identity->last_message = g_strdup_printf ("chain ******* (%s:%s)i (%d bytes, timestamp: %" @@ -318,6 +323,7 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, GST_TIME_ARGS (GST_BUFFER_DURATION (inbuf)), GST_BUFFER_OFFSET (inbuf), GST_BUFFER_OFFSET_END (inbuf), GST_BUFFER_FLAGS (inbuf), inbuf); + GST_UNLOCK (identity); g_object_notify (G_OBJECT (identity), "last-message"); } @@ -428,7 +434,9 @@ gst_identity_get_property (GObject * object, guint prop_id, GValue * value, g_value_set_boolean (value, identity->dump); break; case PROP_LAST_MESSAGE: + GST_LOCK (identity); g_value_set_string (value, identity->last_message); + GST_UNLOCK (identity); break; case PROP_SYNC: g_value_set_boolean (value, identity->sync); -- 2.7.4