Commit 86a6abe3 authored by Alessandro Decina's avatar Alessandro Decina Committed by Tim-Philipp Müller

gst/gstevent.c: Fix gst_mini_object_make_writable() and gst_event_copy() for...

gst/gstevent.c: Fix gst_mini_object_make_writable() and gst_event_copy() for events with event structures by setting ...

Original commit message from CVS:
Patch by: Alessandro Decina  <alessandro at nnva org>
* gst/gstevent.c: (_gst_event_copy):
Fix gst_mini_object_make_writable() and gst_event_copy() for events
with event structures by setting the parent refcount address of the
copied structure to the address of the refcount member of the newly
copied event rather than the address of the refcount member of the
original event. Fixes #358737.
* tests/check/gst/gstevent.c: (GST_START_TEST):
Unit test for the above.
parent 6d3d0584
2006-10-02 Tim-Philipp Müller <tim at centricular dot net>
Patch by: Alessandro Decina <alessandro at nnva org>
* gst/gstevent.c: (_gst_event_copy):
Fix gst_mini_object_make_writable() and gst_event_copy() for events
with event structures by setting the parent refcount address of the
copied structure to the address of the refcount member of the newly
copied event rather than the address of the refcount member of the
original event. Fixes #358737.
* tests/check/gst/gstevent.c: (GST_START_TEST):
Unit test for the above.
2006-09-29 Stefan Kost <ensonic@users.sf.net>
* docs/design/Makefile.am:
......
......@@ -269,7 +269,7 @@ _gst_event_copy (GstEvent * event)
if (event->structure) {
copy->structure = gst_structure_copy (event->structure);
gst_structure_set_parent_refcount (copy->structure,
&event->mini_object.refcount);
&copy->mini_object.refcount);
}
return copy;
}
......
......@@ -217,6 +217,32 @@ GST_START_TEST (create_custom_events)
/* The structure should have been duplicated */
fail_if (gst_event_get_structure (event) ==
gst_event_get_structure (event2));
gst_event_unref (event);
gst_event_unref (event2);
}
/* Make events writable */
{
structure = gst_structure_empty_new ("application/x-custom");
fail_if (structure == NULL);
event = gst_event_new_custom (GST_EVENT_CUSTOM_BOTH, structure);
/* ref the event so that it becomes non-writable */
gst_event_ref (event);
gst_event_ref (event);
/* this should fail if the structure isn't writable */
ASSERT_CRITICAL (gst_structure_remove_all_fields ((GstStructure *)
gst_event_get_structure (event)));
/* now make writable */
event2 =
GST_EVENT (gst_mini_object_make_writable (GST_MINI_OBJECT (event)));
fail_unless (event != event2);
/* this fail if the structure isn't writable */
gst_structure_remove_all_fields ((GstStructure *)
gst_event_get_structure (event2));
gst_event_unref (event);
gst_event_unref (event);
gst_event_unref (event2);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment