giosink: reflow error handling to not leak uri

This commit is contained in:
Stefan Kost 2009-02-26 16:03:39 +02:00
parent 60847e48d7
commit e95bbca65f

View file

@ -245,7 +245,6 @@ gst_gio_sink_start (GstBaseSink * base_sink)
GstGioSink *sink = GST_GIO_SINK (base_sink); GstGioSink *sink = GST_GIO_SINK (base_sink);
GOutputStream *stream; GOutputStream *stream;
GCancellable *cancel = GST_GIO_BASE_SINK (sink)->cancel; GCancellable *cancel = GST_GIO_BASE_SINK (sink)->cancel;
gboolean success;
GError *err = NULL; GError *err = NULL;
gchar *uri; gchar *uri;
@ -263,26 +262,23 @@ gst_gio_sink_start (GstBaseSink * base_sink)
G_OUTPUT_STREAM (g_file_create (sink->file, G_FILE_CREATE_NONE, cancel, G_OUTPUT_STREAM (g_file_create (sink->file, G_FILE_CREATE_NONE, cancel,
&err)); &err));
success = (stream != NULL); if (!stream) {
if (!gst_gio_error (sink, "g_file_create", &err, NULL)) {
/*if (GST_GIO_ERROR_MATCHES (err, EXISTS)) */
/* FIXME: Retry with replace if overwrite == TRUE! */
if (!success && !gst_gio_error (sink, "g_file_create", &err, NULL)) { if (GST_GIO_ERROR_MATCHES (err, NOT_FOUND))
GST_ELEMENT_ERROR (sink, RESOURCE, NOT_FOUND, (NULL),
/*if (GST_GIO_ERROR_MATCHES (err, EXISTS)) */ ("Could not open location %s for writing: %s", uri, err->message));
/* FIXME: Retry with replace if overwrite == TRUE! */ else
GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_READ, (NULL),
if (GST_GIO_ERROR_MATCHES (err, NOT_FOUND)) ("Could not open location %s for writing: %s", uri, err->message));
GST_ELEMENT_ERROR (sink, RESOURCE, NOT_FOUND, (NULL),
("Could not open location %s for writing: %s", uri, err->message));
else
GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_READ, (NULL),
("Could not open location %s for writing: %s", uri, err->message));
g_clear_error (&err);
}
g_free (uri); g_free (uri);
g_clear_error (&err);
}
if (!success)
return FALSE; return FALSE;
}
GST_DEBUG_OBJECT (sink, "opened location %s", uri); GST_DEBUG_OBJECT (sink, "opened location %s", uri);