diff --git a/gio/ChangeLog b/gio/ChangeLog index a5e3f6608..64ec2127f 100644 --- a/gio/ChangeLog +++ b/gio/ChangeLog @@ -1,3 +1,7 @@ +2008-06-10 Paolo Borelli + + * gfile.c (g_file_replace_contents): do not leak the output stream. + 2008-06-10 Michael Natterer * gcontenttype.c (g_content_type_get_icon): fix SEGV by not using diff --git a/gio/gfile.c b/gio/gfile.c index 941fa81f5..a4cbd9b0a 100644 --- a/gio/gfile.c +++ b/gio/gfile.c @@ -5411,6 +5411,7 @@ g_file_replace_contents (GFile *file, GFileOutputStream *out; gsize pos, remainder; gssize res; + gboolean ret; g_return_val_if_fail (G_IS_FILE (file), FALSE); g_return_val_if_fail (contents != NULL, FALSE); @@ -5436,18 +5437,19 @@ g_file_replace_contents (GFile *file, { /* Ignore errors on close */ g_output_stream_close (G_OUTPUT_STREAM (out), cancellable, NULL); - + g_object_unref (out); + /* error is set already */ return FALSE; } - if (!g_output_stream_close (G_OUTPUT_STREAM (out), cancellable, error)) - return FALSE; + ret = g_output_stream_close (G_OUTPUT_STREAM (out), cancellable, error); + g_object_unref (out); if (new_etag) *new_etag = g_file_output_stream_get_etag (out); - - return TRUE; + + return ret; } typedef struct {