From: <tp...@ke...> - 2006-10-02 08:37:44
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: tpm Date: Mon Oct 02 2006 08:37:36 UTC Log message: 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. Modified files: . : ChangeLog gst : gstevent.c tests/check/gst : gstevent.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.2837&r2=1.2838 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstevent.c.diff?r1=1.101&r2=1.102 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/tests/check/gst/gstevent.c.diff?r1=1.17&r2=1.18 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.2837 retrieving revision 1.2838 diff -u -d -r1.2837 -r1.2838 --- ChangeLog 29 Sep 2006 20:29:48 -0000 1.2837 +++ ChangeLog 2 Oct 2006 08:37:23 -0000 1.2838 @@ -1,3 +1,17 @@ +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 <en...@us...> * docs/design/Makefile.am: Index: gstevent.c RCS file: /cvs/gstreamer/gstreamer/gst/gstevent.c,v retrieving revision 1.101 retrieving revision 1.102 diff -u -d -r1.101 -r1.102 --- gstevent.c 15 Sep 2006 08:32:57 -0000 1.101 +++ gstevent.c 2 Oct 2006 08:37:24 -0000 1.102 @@ -269,7 +269,7 @@ if (event->structure) { copy->structure = gst_structure_copy (event->structure); gst_structure_set_parent_refcount (copy->structure, - &event->mini_object.refcount); + ©->mini_object.refcount); } return copy; } RCS file: /cvs/gstreamer/gstreamer/tests/check/gst/gstevent.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- gstevent.c 31 Jul 2006 15:07:30 -0000 1.17 +++ gstevent.c 2 Oct 2006 08:37:24 -0000 1.18 @@ -217,6 +217,32 @@ /* 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); + /* 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 (event2); |