]> Pileus Git - ~andy/gtk/commitdiff
Fix some locking issues
authorMatthias Clasen <matthiasc@src.gnome.org>
Tue, 12 Jun 2007 02:12:32 +0000 (02:12 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Tue, 12 Jun 2007 02:12:32 +0000 (02:12 +0000)
svn path=/trunk/; revision=18105

ChangeLog
modules/printbackends/cups/gtkprintbackendcups.c
modules/printbackends/file/gtkprintbackendfile.c

index da82447b1c3ee405bce3834ec281f53afc10afa3..459eeb1ee25b26014bf731787f7f55704ddf31d0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+       * modules/printbackends/cups/gtkprintbackendfile.c:
+       * modules/printbackends/cups/gtkprintbackendcups.c: Fix some
+       locking issues.  (#420249, Christian Persch)
+
 2007-06-11  Matthias Clasen  <mclasen@redhat.com>
 
        * configure.in: When debugging is turned on, use error-checking
index f4108f56ecd7e0d1c40ba325415d3d3de54c1aed..f89a0b460e3fb39964ff88e4bbc089892aec8161 100644 (file)
@@ -341,6 +341,8 @@ cups_print_cb (GtkPrintBackendCups *print_backend,
   GError *error = NULL;
   CupsPrintStreamData *ps = user_data;
 
+  GDK_THREADS_ENTER ();
+
   GTK_NOTE (PRINTING,
             g_print ("CUPS Backend: %s\n", G_STRFUNC)); 
 
@@ -375,7 +377,8 @@ cups_print_cb (GtkPrintBackendCups *print_backend,
   
   if (error)
     g_error_free (error);
-  
+
+  GDK_THREADS_LEAVE ();  
 }
 
 static void
@@ -818,10 +821,12 @@ cups_request_job_info_cb (GtkPrintBackendCups *print_backend,
   int state;
   gboolean done;
 
+  GDK_THREADS_ENTER ();
+
   if (data->job == NULL)
     {
       cups_job_poll_data_free (data);
-      return;
+      goto done;
     }
 
   data->counter++;
@@ -880,6 +885,9 @@ cups_request_job_info_cb (GtkPrintBackendCups *print_backend,
     }
   else
     cups_job_poll_data_free (data);    
+
+done:
+  GDK_THREADS_LEAVE ();
 }
 
 static void
@@ -968,6 +976,8 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend,
   gboolean list_has_changed;
   GList *removed_printer_checklist;
 
+  GDK_THREADS_ENTER ();
+
   list_has_changed = FALSE;
 
   GTK_NOTE (PRINTING,
@@ -1182,6 +1192,8 @@ done:
     g_signal_emit_by_name (backend, "printer-list-changed");
   
   gtk_print_backend_set_list_done (backend);
+
+  GDK_THREADS_LEAVE ();
 }
 
 static gboolean
@@ -1204,10 +1216,6 @@ cups_request_printer_list (GtkPrintBackendCups *cups_backend)
       !cups_backend->got_default_printer)
     return TRUE;
 
-  g_object_ref (cups_backend);
-
-  GDK_THREADS_LEAVE ();
-
   cups_backend->list_printers_pending = TRUE;
 
   request = gtk_cups_request_new (NULL,
@@ -1227,10 +1235,6 @@ cups_request_printer_list (GtkPrintBackendCups *cups_backend)
                        request,
                        NULL);
 
-  GDK_THREADS_ENTER ();
-
-  g_object_unref (cups_backend);
-
   return TRUE;
 }
 
@@ -1274,6 +1278,8 @@ cups_request_ppd_cb (GtkPrintBackendCups *print_backend,
   ipp_t *response;
   GtkPrinter *printer;
 
+  GDK_THREADS_ENTER ();
+
   GTK_NOTE (PRINTING,
             g_print ("CUPS Backend: %s\n", G_STRFUNC));
 
@@ -1294,7 +1300,7 @@ cups_request_ppd_cb (GtkPrintBackendCups *print_backend,
         } 
         
       g_signal_emit_by_name (printer, "details-acquired", success);
-      return;
+      goto done;
     }
 
   response = gtk_cups_result_get_response (result);
@@ -1305,6 +1311,9 @@ cups_request_ppd_cb (GtkPrintBackendCups *print_backend,
   
   gtk_printer_set_has_details (printer, TRUE);
   g_signal_emit_by_name (printer, "details-acquired", TRUE);
+
+done:
+  GDK_THREADS_LEAVE ();
 }
 
 static void
index 6356c8d4d92a762145155979ae9a7db3b4357013..7dae376cb3953a273162caf244c02ddc28721549 100644 (file)
@@ -326,6 +326,8 @@ file_print_cb (GtkPrintBackendFile *print_backend,
 {
   _PrintStreamData *ps = (_PrintStreamData *) user_data;
 
+  GDK_THREADS_ENTER ();
+
   if (ps->target_io != NULL)
     g_io_channel_unref (ps->target_io);
 
@@ -342,6 +344,8 @@ file_print_cb (GtkPrintBackendFile *print_backend,
     g_object_unref (ps->job);
  
   g_free (ps);
+
+  GDK_THREADS_LEAVE ();
 }
 
 static gboolean