Correct the error handling in splice_stream_with_progress
authorMatthias Clasen <mclasen@redhat.com>
Fri, 26 Mar 2010 13:01:48 +0000 (09:01 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 26 Mar 2010 13:03:22 +0000 (09:03 -0400)
We need to get out of both loops, so a simple 'break' doesn't cut it.
Bugs 613748 and 613923

gio/gfile.c

index fe8f4ed..b694ef3 100644 (file)
@@ -2826,10 +2826,10 @@ splice_stream_with_progress (GInputStream           *in,
       while (n_read > 0)
         {
           if (g_cancellable_set_error_if_cancelled (cancellable, error))
-            break;
+            goto out;
 
           if (!do_splice (buffer[0], NULL, fd_out, &offset_out, n_read, &n_written, error))
-            break;
+            goto out;
 
           n_read -= n_written;
         }
@@ -2842,6 +2842,7 @@ splice_stream_with_progress (GInputStream           *in,
   if (progress_callback)
     progress_callback (offset_in, total_size, progress_callback_data);
 
+ out:
   close (buffer[0]);
   close (buffer[1]);