From: Matthias Clasen Date: Thu, 27 Apr 2023 05:22:38 +0000 (+0200) Subject: filedialog: Plug a memory leak X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~361 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=39b3b2444b5046950f3d54eb4951ba5e2b15734b;p=gtk4.git filedialog: Plug a memory leak We own a reference to the native dialog, and we need to drop it when we're done. --- diff --git a/gtk/gtkfiledialog.c b/gtk/gtkfiledialog.c index 590b032779..746a54cb3d 100644 --- a/gtk/gtkfiledialog.c +++ b/gtk/gtkfiledialog.c @@ -784,6 +784,8 @@ G_GNUC_END_IGNORE_DEPRECATIONS else g_task_return_new_error (task, GTK_DIALOG_ERROR, GTK_DIALOG_ERROR_FAILED, "Unknown failure (%d)", response); + gtk_native_dialog_destroy (GTK_NATIVE_DIALOG (g_task_get_task_data (task))); + g_object_unref (task); } @@ -943,7 +945,7 @@ gtk_file_dialog_open (GtkFileDialog *self, task = g_task_new (self, cancellable, callback, user_data); g_task_set_check_cancellable (task, FALSE); g_task_set_source_tag (task, gtk_file_dialog_open); - g_task_set_task_data (task, chooser, (GDestroyNotify) gtk_native_dialog_destroy); + g_task_set_task_data (task, chooser, g_object_unref); if (cancellable) g_signal_connect (cancellable, "cancelled", G_CALLBACK (cancelled_cb), task); @@ -976,9 +978,6 @@ gtk_file_dialog_open_finish (GtkFileDialog *self, g_return_val_if_fail (g_task_is_valid (result, self), NULL); g_return_val_if_fail (g_task_get_source_tag (G_TASK (result)) == gtk_file_dialog_open, NULL); - /* Destroy the dialog window not to be bound to GTask lifecycle */ - g_task_set_task_data (G_TASK (result), NULL, NULL); - return finish_file_op (self, G_TASK (result), error); } @@ -1020,7 +1019,7 @@ gtk_file_dialog_select_folder (GtkFileDialog *self, task = g_task_new (self, cancellable, callback, user_data); g_task_set_check_cancellable (task, FALSE); g_task_set_source_tag (task, gtk_file_dialog_select_folder); - g_task_set_task_data (task, chooser, (GDestroyNotify) gtk_native_dialog_destroy); + g_task_set_task_data (task, chooser, g_object_unref); if (cancellable) g_signal_connect (cancellable, "cancelled", G_CALLBACK (cancelled_cb), task); @@ -1053,9 +1052,6 @@ gtk_file_dialog_select_folder_finish (GtkFileDialog *self, g_return_val_if_fail (g_task_is_valid (result, self), NULL); g_return_val_if_fail (g_task_get_source_tag (G_TASK (result)) == gtk_file_dialog_select_folder, NULL); - /* Destroy the dialog window not to be bound to GTask lifecycle */ - g_task_set_task_data (G_TASK (result), NULL, NULL); - return finish_file_op (self, G_TASK (result), error); } @@ -1093,7 +1089,7 @@ gtk_file_dialog_save (GtkFileDialog *self, task = g_task_new (self, cancellable, callback, user_data); g_task_set_check_cancellable (task, FALSE); g_task_set_source_tag (task, gtk_file_dialog_save); - g_task_set_task_data (task, chooser, (GDestroyNotify) gtk_native_dialog_destroy); + g_task_set_task_data (task, chooser, g_object_unref); if (cancellable) g_signal_connect (cancellable, "cancelled", G_CALLBACK (cancelled_cb), task); @@ -1126,9 +1122,6 @@ gtk_file_dialog_save_finish (GtkFileDialog *self, g_return_val_if_fail (g_task_is_valid (result, self), NULL); g_return_val_if_fail (g_task_get_source_tag (G_TASK (result)) == gtk_file_dialog_save, NULL); - /* Destroy the dialog window not to be bound to GTask lifecycle */ - g_task_set_task_data (G_TASK (result), NULL, NULL); - return finish_file_op (self, G_TASK (result), error); } @@ -1169,7 +1162,7 @@ gtk_file_dialog_open_multiple (GtkFileDialog *self, task = g_task_new (self, cancellable, callback, user_data); g_task_set_check_cancellable (task, FALSE); g_task_set_source_tag (task, gtk_file_dialog_open_multiple); - g_task_set_task_data (task, chooser, (GDestroyNotify) gtk_native_dialog_destroy); + g_task_set_task_data (task, chooser, g_object_unref); if (cancellable) g_signal_connect (cancellable, "cancelled", G_CALLBACK (cancelled_cb), task); @@ -1203,9 +1196,6 @@ gtk_file_dialog_open_multiple_finish (GtkFileDialog *self, g_return_val_if_fail (g_task_is_valid (result, self), NULL); g_return_val_if_fail (g_task_get_source_tag (G_TASK (result)) == gtk_file_dialog_open_multiple, NULL); - /* Destroy the dialog window not to be bound to GTask lifecycle */ - g_task_set_task_data (G_TASK (result), NULL, NULL); - return finish_multiple_files_op (self, G_TASK (result), error); } @@ -1246,7 +1236,7 @@ gtk_file_dialog_select_multiple_folders (GtkFileDialog *self, task = g_task_new (self, cancellable, callback, user_data); g_task_set_check_cancellable (task, FALSE); g_task_set_source_tag (task, gtk_file_dialog_select_multiple_folders); - g_task_set_task_data (task, chooser, (GDestroyNotify) gtk_native_dialog_destroy); + g_task_set_task_data (task, chooser, g_object_unref); if (cancellable) g_signal_connect (cancellable, "cancelled", G_CALLBACK (cancelled_cb), task); @@ -1280,9 +1270,6 @@ gtk_file_dialog_select_multiple_folders_finish (GtkFileDialog *self, g_return_val_if_fail (g_task_is_valid (result, self), NULL); g_return_val_if_fail (g_task_get_source_tag (G_TASK (result)) == gtk_file_dialog_select_multiple_folders, NULL); - /* Destroy the dialog window not to be bound to GTask lifecycle */ - g_task_set_task_data (G_TASK (result), NULL, NULL); - return finish_multiple_files_op (self, G_TASK (result), error); }