From: <sl...@ke...> - 2007-11-07 11:48:19
|
CVS Root: /cvs/gstreamer Module: gst-plugins-bad Changes by: slomo Date: Wed Nov 07 2007 11:48:23 UTC Log message: * ext/gio/gstgio.c: (plugin_init): Remove nowadays unnecessary workaround for a crash. * ext/gio/gstgiosink.c: (gst_gio_sink_finalize), (gst_gio_sink_start), (gst_gio_sink_stop), (gst_gio_sink_unlock_stop): * ext/gio/gstgiosink.h: * ext/gio/gstgiosrc.c: (gst_gio_src_finalize), (gst_gio_src_start), (gst_gio_src_stop), (gst_gio_src_unlock_stop): * ext/gio/gstgiosrc.h: Make the finalize function safer, clean up everything that could stay around. Reset the cancellable instead of creating a new one after cancelling some operation. Don't store the GFile in the element, it's only necessary for creating the streams. Modified files: . : ChangeLog ext/gio : gstgio.c gstgiosink.c gstgiosink.h gstgiosrc.c gstgiosrc.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.2842&r2=1.2843 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/gio/gstgio.c.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/gio/gstgiosink.c.diff?r1=1.3&r2=1.4 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/gio/gstgiosink.h.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/gio/gstgiosrc.c.diff?r1=1.3&r2=1.4 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/gio/gstgiosrc.h.diff?r1=1.2&r2=1.3 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v retrieving revision 1.2842 retrieving revision 1.2843 diff -u -d -r1.2842 -r1.2843 --- ChangeLog 6 Nov 2007 12:23:34 -0000 1.2842 +++ ChangeLog 7 Nov 2007 11:48:07 -0000 1.2843 @@ -1,3 +1,24 @@ +2007-11-07 Sebastian Dröge <sl...@ci...> + + * ext/gio/gstgio.c: (plugin_init): + Remove nowadays unnecessary workaround for a crash. + + * ext/gio/gstgiosink.c: (gst_gio_sink_finalize), + (gst_gio_sink_start), (gst_gio_sink_stop), + (gst_gio_sink_unlock_stop): + * ext/gio/gstgiosink.h: + * ext/gio/gstgiosrc.c: (gst_gio_src_finalize), (gst_gio_src_start), + (gst_gio_src_stop), (gst_gio_src_unlock_stop): + * ext/gio/gstgiosrc.h: + Make the finalize function safer, clean up everything that could stay + around. + Reset the cancellable instead of creating a new one after cancelling + some operation. + Don't store the GFile in the element, it's only necessary for creating + the streams. 2007-11-06 Sebastian Dröge <sl...@ci...> * gst/spectrum/demo-audiotest.c: (main): Index: gstgio.c RCS file: /cvs/gstreamer/gst-plugins-bad/ext/gio/gstgio.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- gstgio.c 8 Oct 2007 06:07:22 -0000 1.2 +++ gstgio.c 7 Nov 2007 11:48:08 -0000 1.3 @@ -189,13 +189,6 @@ GST_DEBUG_CATEGORY_INIT (gst_gio_debug, "gio", 0, "GIO elements"); - /* FIXME: This is needed to prevent a crash. Needs further investigation - * probably. */ - if (g_vfs_get_default () == NULL) { - GST_WARNING ("Failed to initialize default VFS, not registering plugin"); - return FALSE; - } - /* FIXME: Rank is MARGINAL for now, should be at least SECONDARY+1 in the future * to replace gnomevfssink/src. For testing purposes PRIMARY+1 one makes sense * so it gets autoplugged and preferred over filesrc/sink. */ Index: gstgiosink.c RCS file: /cvs/gstreamer/gst-plugins-bad/ext/gio/gstgiosink.c,v retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gstgiosink.c 2 Oct 2007 07:43:57 -0000 1.3 +++ gstgiosink.c 7 Nov 2007 11:48:09 -0000 1.4 @@ -135,12 +135,20 @@ { GstGioSink *sink = GST_GIO_SINK (object); - g_object_unref (sink->cancel); + if (sink->cancel) { + g_object_unref (sink->cancel); + sink->cancel = NULL; + } - if (sink->file) - g_object_unref (sink->file); + if (sink->stream) { + g_object_unref (sink->stream); + sink->stream = NULL; - g_free (sink->location); + if (sink->location) { + g_free (sink->location); + sink->location = NULL; GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (object)); } @@ -186,6 +194,7 @@ gst_gio_sink_start (GstBaseSink * base_sink) GstGioSink *sink = GST_GIO_SINK (base_sink); + GFile *file; gboolean success; GError *err = NULL; @@ -195,18 +204,20 @@ return FALSE; } - sink->file = g_file_new_for_uri (sink->location); + file = g_file_new_for_uri (sink->location); - if (sink->file == NULL) { + if (file == NULL) { GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE, (NULL), ("Malformed URI or protocol not supported (%s)", sink->location)); sink->stream = - g_file_create (sink->file, G_FILE_CREATE_FLAGS_NONE, sink->cancel, &err); + g_file_create (file, G_FILE_CREATE_FLAGS_NONE, sink->cancel, &err); success = (sink->stream != NULL); + g_object_unref (file); if (!success && !gst_gio_error (sink, "g_file_create", &err, NULL)) { /*if (GST_GIO_ERROR_MATCHES (err, EXISTS)) */ @@ -224,12 +235,8 @@ g_clear_error (&err); - if (!success) { - sink->file = NULL; + if (!success) sink->position = 0; @@ -245,11 +252,6 @@ gboolean success = TRUE; - if (sink->file != NULL) { if (sink->stream != NULL) { /* FIXME: In case that the call below would block, there is no one to * trigger the cancellation! */ @@ -289,10 +291,9 @@ - GST_LOG_OBJECT (sink, "restoring cancellable"); + GST_LOG_OBJECT (sink, "resetting cancellable"); - sink->cancel = g_cancellable_new (); + g_cancellable_reset (sink->cancel); return TRUE; Index: gstgiosink.h RCS file: /cvs/gstreamer/gst-plugins-bad/ext/gio/gstgiosink.h,v --- gstgiosink.h 21 Sep 2007 18:00:24 -0000 1.2 +++ gstgiosink.h 7 Nov 2007 11:48:09 -0000 1.3 @@ -53,7 +53,6 @@ /*< private >*/ GCancellable *cancel; - GFile *file; gchar *location; guint64 position; GFileOutputStream *stream; Index: gstgiosrc.c RCS file: /cvs/gstreamer/gst-plugins-bad/ext/gio/gstgiosrc.c,v --- gstgiosrc.c 29 Sep 2007 07:01:55 -0000 1.3 +++ gstgiosrc.c 7 Nov 2007 11:48:09 -0000 1.4 @@ -128,12 +128,20 @@ GstGioSrc *src = GST_GIO_SRC (object); - g_object_unref (src->cancel); + if (src->cancel) { + g_object_unref (src->cancel); + src->cancel = NULL; - if (src->file) - g_object_unref (src->file); + if (src->stream) { + g_object_unref (src->stream); + src->stream = NULL; - g_free (src->location); + if (src->location) { + g_free (src->location); + src->location = NULL; @@ -179,6 +187,7 @@ gst_gio_src_start (GstBaseSrc * base_src) GstGioSrc *src = GST_GIO_SRC (base_src); if (src->location == NULL) { @@ -186,15 +195,17 @@ - src->file = g_file_new_for_uri (src->location); + file = g_file_new_for_uri (src->location); - if (src->file == NULL) { GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL), ("Malformed URI or protocol not supported (%s)", src->location)); - src->stream = g_file_read (src->file, src->cancel, &err); + src->stream = g_file_read (file, src->cancel, &err); if (src->stream == NULL && !gst_gio_error (src, "g_file_read", &err, NULL)) { @@ -209,13 +220,9 @@ - src->file = NULL; } else if (src->stream == NULL) { @@ -250,11 +257,6 @@ src->stream = NULL; - if (src->file != NULL) { GST_DEBUG_OBJECT (src, "closed location %s", src->location); return success; @@ -321,10 +323,9 @@ - GST_LOG_OBJECT (src, "restoring cancellable"); + GST_LOG_OBJECT (src, "resetting cancellable"); - src->cancel = g_cancellable_new (); + g_cancellable_reset (src->cancel); Index: gstgiosrc.h RCS file: /cvs/gstreamer/gst-plugins-bad/ext/gio/gstgiosrc.h,v --- gstgiosrc.h 21 Sep 2007 18:00:24 -0000 1.2 +++ gstgiosrc.h 7 Nov 2007 11:48:09 -0000 1.3 GFileInputStream *stream; |