+2005-10-04 Wim Taymans <wim@fluendo.com>
+
+ * gst/elements/gstfakesink.c: (gst_fake_sink_get_property),
+ (gst_fake_sink_event), (gst_fake_sink_preroll),
+ (gst_fake_sink_render), (gst_fake_sink_change_state):
+ * gst/elements/gstfakesrc.c: (gst_fake_src_event_handler),
+ (gst_fake_src_get_property), (gst_fake_src_create),
+ (gst_fake_src_stop):
+ * gst/elements/gstidentity.c: (gst_identity_stop):
+ Protect last_message with lock.
+
2005-10-04 Edward Hervey <edward@fluendo.com>
* gst/gstformat.h:
g_value_set_boolean (value, sink->signal_handoffs);
break;
case PROP_LAST_MESSAGE:
+ GST_LOCK (sink);
g_value_set_string (value, sink->last_message);
+ GST_UNLOCK (sink);
break;
case PROP_CAN_ACTIVATE_PUSH:
g_value_set_boolean (value, GST_BASE_SINK (sink)->can_activate_push);
if (!sink->silent) {
gchar *sstr;
+ GST_LOCK (sink);
g_free (sink->last_message);
if ((s = gst_event_get_structure (event)))
g_strdup_printf ("event ******* E (type: %d, %s) %p",
GST_EVENT_TYPE (event), sstr, event);
g_free (sstr);
+ GST_UNLOCK (sink);
g_object_notify (G_OBJECT (sink), "last_message");
}
GstFakeSink *sink = GST_FAKE_SINK (bsink);
if (!sink->silent) {
+ GST_LOCK (sink);
g_free (sink->last_message);
sink->last_message = g_strdup_printf ("preroll ******* ");
+ GST_UNLOCK (sink);
g_object_notify (G_OBJECT (sink), "last_message");
}
GstFakeSink *sink = GST_FAKE_SINK (bsink);
if (!sink->silent) {
+ GST_LOCK (sink);
g_free (sink->last_message);
sink->last_message =
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), GST_BUFFER_OFFSET (buf),
GST_BUFFER_OFFSET_END (buf), GST_MINI_OBJECT (buf)->flags, buf);
+ GST_UNLOCK (sink);
g_object_notify (G_OBJECT (sink), "last_message");
}
case GST_STATE_CHANGE_READY_TO_NULL:
if (fakesink->state_error == FAKE_SINK_STATE_ERROR_READY_NULL)
goto error;
+ GST_LOCK (fakesink);
g_free (fakesink->last_message);
fakesink->last_message = NULL;
+ GST_UNLOCK (fakesink);
break;
default:
break;
src = GST_FAKE_SRC (basesrc);
if (!src->silent) {
+ GST_LOCK (src);
g_free (src->last_message);
src->last_message =
g_strdup_printf ("event ******* E (type: %d) %p",
GST_EVENT_TYPE (event), event);
+ GST_UNLOCK (src);
g_object_notify (G_OBJECT (src), "last_message");
}
g_value_set_boolean (value, src->dump);
break;
case PROP_LAST_MESSAGE:
+ GST_LOCK (src);
g_value_set_string (value, src->last_message);
+ GST_UNLOCK (src);
break;
case PROP_CAN_ACTIVATE_PUSH:
g_value_set_boolean (value, GST_BASE_SRC (src)->can_activate_push);
GST_BUFFER_TIMESTAMP (buf) = time;
if (!src->silent) {
+ GST_LOCK (src);
g_free (src->last_message);
src->last_message =
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), GST_BUFFER_OFFSET (buf),
GST_BUFFER_OFFSET_END (buf), GST_MINI_OBJECT (buf)->flags, buf);
+ GST_UNLOCK (src);
g_object_notify (G_OBJECT (src), "last_message");
}
src = GST_FAKE_SRC (basesrc);
+ GST_LOCK (src);
if (src->parent) {
gst_buffer_unref (src->parent);
src->parent = NULL;
}
g_free (src->last_message);
src->last_message = NULL;
+ GST_UNLOCK (src);
return TRUE;
}
identity = GST_IDENTITY (trans);
+ GST_LOCK (identity);
g_free (identity->last_message);
identity->last_message = NULL;
+ GST_UNLOCK (identity);
return TRUE;
}
res = gst_pad_push (pad, gst_buffer_ref (data->buffer));
g_value_set_enum (ret, res);
+
gst_object_unref (pad);
return (res == GST_FLOW_OK);
g_value_set_boolean (value, sink->signal_handoffs);
break;
case PROP_LAST_MESSAGE:
+ GST_LOCK (sink);
g_value_set_string (value, sink->last_message);
+ GST_UNLOCK (sink);
break;
case PROP_CAN_ACTIVATE_PUSH:
g_value_set_boolean (value, GST_BASE_SINK (sink)->can_activate_push);
if (!sink->silent) {
gchar *sstr;
+ GST_LOCK (sink);
g_free (sink->last_message);
if ((s = gst_event_get_structure (event)))
g_strdup_printf ("event ******* E (type: %d, %s) %p",
GST_EVENT_TYPE (event), sstr, event);
g_free (sstr);
+ GST_UNLOCK (sink);
g_object_notify (G_OBJECT (sink), "last_message");
}
GstFakeSink *sink = GST_FAKE_SINK (bsink);
if (!sink->silent) {
+ GST_LOCK (sink);
g_free (sink->last_message);
sink->last_message = g_strdup_printf ("preroll ******* ");
+ GST_UNLOCK (sink);
g_object_notify (G_OBJECT (sink), "last_message");
}
GstFakeSink *sink = GST_FAKE_SINK (bsink);
if (!sink->silent) {
+ GST_LOCK (sink);
g_free (sink->last_message);
sink->last_message =
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), GST_BUFFER_OFFSET (buf),
GST_BUFFER_OFFSET_END (buf), GST_MINI_OBJECT (buf)->flags, buf);
+ GST_UNLOCK (sink);
g_object_notify (G_OBJECT (sink), "last_message");
}
case GST_STATE_CHANGE_READY_TO_NULL:
if (fakesink->state_error == FAKE_SINK_STATE_ERROR_READY_NULL)
goto error;
+ GST_LOCK (fakesink);
g_free (fakesink->last_message);
fakesink->last_message = NULL;
+ GST_UNLOCK (fakesink);
break;
default:
break;
src = GST_FAKE_SRC (basesrc);
if (!src->silent) {
+ GST_LOCK (src);
g_free (src->last_message);
src->last_message =
g_strdup_printf ("event ******* E (type: %d) %p",
GST_EVENT_TYPE (event), event);
+ GST_UNLOCK (src);
g_object_notify (G_OBJECT (src), "last_message");
}
g_value_set_boolean (value, src->dump);
break;
case PROP_LAST_MESSAGE:
+ GST_LOCK (src);
g_value_set_string (value, src->last_message);
+ GST_UNLOCK (src);
break;
case PROP_CAN_ACTIVATE_PUSH:
g_value_set_boolean (value, GST_BASE_SRC (src)->can_activate_push);
GST_BUFFER_TIMESTAMP (buf) = time;
if (!src->silent) {
+ GST_LOCK (src);
g_free (src->last_message);
src->last_message =
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), GST_BUFFER_OFFSET (buf),
GST_BUFFER_OFFSET_END (buf), GST_MINI_OBJECT (buf)->flags, buf);
+ GST_UNLOCK (src);
g_object_notify (G_OBJECT (src), "last_message");
}
src = GST_FAKE_SRC (basesrc);
+ GST_LOCK (src);
if (src->parent) {
gst_buffer_unref (src->parent);
src->parent = NULL;
}
g_free (src->last_message);
src->last_message = NULL;
+ GST_UNLOCK (src);
return TRUE;
}
identity = GST_IDENTITY (trans);
+ GST_LOCK (identity);
g_free (identity->last_message);
identity->last_message = NULL;
+ GST_UNLOCK (identity);
return TRUE;
}
res = gst_pad_push (pad, gst_buffer_ref (data->buffer));
g_value_set_enum (ret, res);
+
gst_object_unref (pad);
return (res == GST_FLOW_OK);