2005-05-30 Wim Taymans <wim@fluendo.com>
+ * 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 <wim@fluendo.com>
+
* gst/gstelement.c: (gst_element_init),
(gst_element_pads_activate), (gst_element_change_state):
Slicker pad activation code.
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");
}
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: %"
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;
}
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: %"
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");
}
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);
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");
}
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: %"
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;
}
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: %"
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");
}
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);