From: <wt...@fr...> - 2005-11-04 12:08:35
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: wtay Date: Fri Nov 04 2005 04:08:31 PST Log message: * gst/gstbus.c: (gst_bus_post), (gst_bus_set_sync_handler): Don't leak a mutex unlock in case of an error. * gst/gstbus.h: Doc fixes. Modified files: . : ChangeLog gst : gstbus.c gstbus.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.1831&r2=1.1832 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstbus.c.diff?r1=1.46&r2=1.47 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstbus.h.diff?r1=1.15&r2=1.16 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.1831 retrieving revision 1.1832 diff -u -d -r1.1831 -r1.1832 --- ChangeLog 4 Nov 2005 11:43:09 -0000 1.1831 +++ ChangeLog 4 Nov 2005 12:08:19 -0000 1.1832 @@ -1,5 +1,13 @@ 2005-11-04 Wim Taymans <wi...@fl...> + * gst/gstbus.c: (gst_bus_post), (gst_bus_set_sync_handler): + Don't leak a mutex unlock in case of an error. + + * gst/gstbus.h: + Doc fixes. +2005-11-04 Wim Taymans <wi...@fl...> * gst/gstbus.c: (gst_bus_class_init), (gst_bus_init), (gst_bus_post): Get the context to wake up only once. Index: gstbus.c RCS file: /cvs/gstreamer/gstreamer/gst/gstbus.c,v retrieving revision 1.46 retrieving revision 1.47 diff -u -d -r1.46 -r1.47 --- gstbus.c 4 Nov 2005 11:43:10 -0000 1.46 +++ gstbus.c 4 Nov 2005 12:08:19 -0000 1.47 @@ -522,6 +522,9 @@ * function is usually only called by the creator of the bus. Applications * should handle messages asynchronously using the gst_bus watch and poll * functions. + * + * You cannot replace an existing sync_handler. You can pass NULL to this + * function, which will clear the existing handler. */ void gst_bus_set_sync_handler (GstBus * bus, GstBusSyncHandler func, gpointer data) @@ -532,11 +535,21 @@ /* Assert if the user attempts to replace an existing sync_handler, * other than to clear it */ - g_assert (func == NULL || bus->sync_handler == NULL); + if (func != NULL && bus->sync_handler != NULL) + goto no_replace; bus->sync_handler = func; bus->sync_handler_data = data; GST_UNLOCK (bus); + return; +no_replace: + { + GST_UNLOCK (bus); + g_warning ("cannot replace existing sync handler"); + return; + } } /* GSource for the bus Index: gstbus.h RCS file: /cvs/gstreamer/gstreamer/gst/gstbus.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- gstbus.h 15 Oct 2005 15:30:21 -0000 1.15 +++ gstbus.h 4 Nov 2005 12:08:19 -0000 1.16 @@ -77,6 +77,9 @@ * into the bus. This function is mostly used internally. Only one sync handler * can be attached to a given bus. * + * If the handler returns GST_BUS_DROP, it should unref the message, else the + * message should not be unreffed by the sync handler. * Returns: #GstBusSyncReply stating what to do with the message typedef GstBusSyncReply (*GstBusSyncHandler) (GstBus * bus, GstMessage * message, gpointer data); |