printing: Unref old spool_io before setting new one
authorMarek Kasik <mkasik@redhat.com>
Wed, 12 Jan 2022 11:36:44 +0000 (12:36 +0100)
committerMarek Kasik <mkasik@redhat.com>
Wed, 12 Jan 2022 11:47:28 +0000 (12:47 +0100)
Unref private spool_io of GtkPrintJob before setting it to a new one
in gtk_print_job_set_source_file() and gtk_print_job_set_source_fd()
to prevent a leak.

Fixes: #4627
gtk/gtkprintjob.c

index 945a43a0d9f8ad07ea865df01ec5fa399de63d63..d04c506a7efef2c73f2de1d147303e586a60ff5a 100644 (file)
@@ -441,6 +441,9 @@ gtk_print_job_set_source_file (GtkPrintJob *job,
 
   g_return_val_if_fail (GTK_IS_PRINT_JOB (job), FALSE);
 
+  if (job->spool_io != NULL)
+    g_io_channel_unref (job->spool_io);
+
   job->spool_io = g_io_channel_new_file (filename, "r", &tmp_error);
 
   if (tmp_error == NULL)
@@ -483,6 +486,9 @@ gtk_print_job_set_source_fd (GtkPrintJob  *job,
   g_return_val_if_fail (GTK_IS_PRINT_JOB (job), FALSE);
   g_return_val_if_fail (fd >= 0, FALSE);
 
+  if (job->spool_io != NULL)
+    g_io_channel_unref (job->spool_io);
+
   job->spool_io = g_io_channel_unix_new (fd);
   if (g_io_channel_set_encoding (job->spool_io, NULL, error) != G_IO_STATUS_NORMAL)
     return FALSE;