[gtk+/gtk-3-8] gtkprintjob: release the surface and backend before the output io channel



commit 9de7b8af49a70e00c0b02293aa8ae7c587764cb8
Author: Carlos Garcia Campos <cgarcia igalia com>
Date:   Wed Oct 3 19:24:52 2012 +0200

    gtkprintjob: release the surface and backend before the output io channel
    
    If the GtkPrintJob is freed too early when the surface has been created
    but the job hasn't been sent to the printer, it's possible that the
    file print backend tries to write to the io chaneel when it is already
    closed. This produces runtime critical warnings:
    
    GLib-CRITICAL **: g_io_channel_write_chars: assertion `channel->is_writeable' failed
    
    https://bugzilla.gnome.org/show_bug.cgi?id=685420

 gtk/gtkprintjob.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
---
diff --git a/gtk/gtkprintjob.c b/gtk/gtkprintjob.c
index 49c664d..439b668 100644
--- a/gtk/gtkprintjob.c
+++ b/gtk/gtkprintjob.c
@@ -269,21 +269,21 @@ gtk_print_job_finalize (GObject *object)
   GtkPrintJob *job = GTK_PRINT_JOB (object);
   GtkPrintJobPrivate *priv = job->priv;
 
+  if (priv->surface)
+    cairo_surface_destroy (priv->surface);
+
+  if (priv->backend)
+    g_object_unref (priv->backend);
+
   if (priv->spool_io != NULL)
     {
       g_io_channel_unref (priv->spool_io);
       priv->spool_io = NULL;
     }
 
-  if (priv->backend)
-    g_object_unref (priv->backend);
-
   if (priv->printer)
     g_object_unref (priv->printer);
 
-  if (priv->surface)
-    cairo_surface_destroy (priv->surface);
-
   if (priv->settings)
     g_object_unref (priv->settings);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]